diff --git a/SUMMARY.md b/SUMMARY.md
index 0b198ec..5782865 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -8,6 +8,7 @@
## Lua
* [Lua Overview](lua/overview/README.md)
+* [Memory Management](lua/memory/README.md)
## Contributing
@@ -18,8 +19,8 @@
## Control CommandPost
* [AppleScript](control/applescript/README.md)
-* [Command Line Tool](control/commandline/README.md)
* [URL Handler](control/urlhandler/README.md)
+* [Command Line Tool](control/commandline/README.md)
## Plugins
@@ -29,442 +30,712 @@
* [Translating CommandPost](internationalisation/translate/README.md)
-## Final Cut Pro
-
-* [FCPXML](final_cut_pro/fcpxml/README.md)
-* [iXML](final_cut_pro/ixml/README.md)
-* [Package Contents](final_cut_pro/package_contents/README.md)
-
## Bundled Extensions
-* [axuielement](api/axuielement/Reference.md)
-* [gambiarra](api/gambiarra/README.md)
* [i18n](api/i18n/README.md)
* [mimetypes](api/mimetypes/README.md)
* [moses](api/moses/README.md)
* [resty](api/resty/README.md)
* [semver](api/semver/README.md)
* [slaxml](api/slaxml/README.md)
-* [touchbar](api/touchbar/README.md)
## CommandPost API
* [cp](api/cp/cp.md)
- * apple
- * [compressor](api/cp/cp.compressor.md)
- * [finalcutpro](api/cp/cp.apple.finalcutpro.md)
- * cmd
- * [CommandEditor](api/cp/cp.apple.finalcutpro.cmd.CommandEditor.md)
- * content
- * [Clip](api/cp/cp.apple.finalcutpro.content.Clip.md)
- * [destinations](api/cp/cp.apple.finalcutpro.destinations.md)
- * export
- * [destinations](api/cp/cp.apple.finalcutpro.export.destinations.md)
- * [ExportDialog](api/cp/cp.apple.finalcutpro.export.ExportDialog.md)
- * [GoToPrompt](api/cp/cp.apple.finalcutpro.export.GoToPrompt.md)
- * [ReplaceAlert](api/cp/cp.apple.finalcutpro.export.ReplaceAlert.md)
- * [SaveSheet](api/cp/cp.apple.finalcutpro.export.SaveSheet.md)
- * import
- * [MediaImport](api/cp/cp.apple.finalcutpro.import.MediaImport.md)
- * [keycodes](api/cp/cp.apple.finalcutpro.keycodes.md)
- * main
- * [Browser](api/cp/cp.apple.finalcutpro.main.Browser.md)
- * [ColorBoard](api/cp/cp.apple.finalcutpro.main.ColorBoard.md)
- * [ColorPucker](api/cp/cp.apple.finalcutpro.main.ColorPucker.md)
- * [EffectsBrowser](api/cp/cp.apple.finalcutpro.main.EffectsBrowser.md)
- * [FullScreenWindow](api/cp/cp.apple.finalcutpro.main.FullScreenWindow.md)
- * [GeneratorsBrowser](api/cp/cp.apple.finalcutpro.main.GeneratorsBrowser.md)
- * [Inspector](api/cp/cp.apple.finalcutpro.main.Inspector.md)
- * [AudioInspector](api/cp/cp.apple.finalcutpro.main.Inspector.AudioInspector.md)
- * [ColorInspector](api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.md)
- * [ColorBoard](api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard.md)
- * [ColorCurves](api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves.md)
- * [ColorWheels](api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.md)
- * [HueSaturationCurves](api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves.md)
- * [EffectInspector](api/cp/cp.apple.finalcutpro.main.Inspector.EffectInspector.md)
- * [GeneratorInspector](api/cp/cp.apple.finalcutpro.main.Inspector.GeneratorInspector.md)
- * [InfoInspector](api/cp/cp.apple.finalcutpro.main.Inspector.InfoInspector.md)
- * [ShareInspector](api/cp/cp.apple.finalcutpro.main.Inspector.ShareInspector.md)
- * [TextInspector](api/cp/cp.apple.finalcutpro.main.Inspector.TextInspector.md)
- * [TitleInspector](api/cp/cp.apple.finalcutpro.main.Inspector.TitleInspector.md)
- * [TransitionInspector](api/cp/cp.apple.finalcutpro.main.Inspector.TransitionInspector.md)
- * [VideoInspector](api/cp/cp.apple.finalcutpro.main.Inspector.AudioInspector.md)
- * [LibrariesBrowser](api/cp/cp.apple.finalcutpro.main.LibrariesBrowser.md)
- * [LibrariesFilmstrip](api/cp/cp.apple.finalcutpro.main.LibrariesFilmstrip.md)
- * [LibrariesList](api/cp/cp.apple.finalcutpro.main.LibrariesList.md)
- * [MediaBrowser](api/cp/cp.apple.finalcutpro.main.MediaBrowser.md)
- * [Playhead](api/cp/cp.apple.finalcutpro.main.Playhead.md)
- * [PrimaryWindow](api/cp/cp.apple.finalcutpro.main.PrimaryWindow.md)
- * [SecondaryWindow](api/cp/cp.apple.finalcutpro.main.SecondaryWindow.md)
- * [Timeline](api/cp/cp.apple.finalcutpro.main.Timeline.md)
- * [TimelineAppearance](api/cp/cp.apple.finalcutpro.main.TimelineAppearance.md)
- * [TimelineContents](api/cp/cp.apple.finalcutpro.main.TimelineContents.md)
- * [TimelineToolbar](api/cp/cp.apple.finalcutpro.main.TimelineToolbar.md)
- * [Viewer](api/cp/cp.apple.finalcutpro.main.Viewer.md)
- * [MenuBar](api/cp/cp.apple.finalcutpro.MenuBar.md)
- * [plugins](api/cp/cp.apple.finalcutpro.plugins.md)
- * prefs
- * [ImportPanel](api/cp/cp.apple.finalcutpro.prefs.ImportPanel.md)
- * [PlaybackPanel](api/cp/cp.apple.finalcutpro.prefs.PlaybackPanel.md)
- * [PreferencesWindow](api/cp/cp.apple.finalcutpro.prefs.PreferencesWindow.md)
- * [WindowWatcher](api/cp/cp.apple.finalcutpro.WindowWatcher.md)
- * [bench](api/cp/cp.bench.md)
- * [choices](api/cp/cp.choices.md)
- * [builder](api/cp/cp.choices.builder.md)
- * [commands](api/cp/cp.commands.md)
- * [command](api/cp/cp.commands.command.md)
- * [englishKeyCodes](api/cp/cp.commands.englishKeyCodes.md)
- * [shortcut](api/cp/cp.commands.shortcut.md)
- * [builder](api/cp/cp.commands.shortcut.builder.md)
- * [config](api/cp/cp.config.md)
- * [accessibilityStateCallback](api/cp/cp.config.accessibilityStateCallback.md)
- * [dockIconClickCallback](api/cp/cp.config.dockIconClickCallback.md)
- * [fileDroppedToDockIconCallback](api/cp/cp.config.fileDroppedToDockIconCallback.md)
- * [shutdownCallback](api/cp/cp.config.shutdownCallback.md)
- * [textDroppedToDockIconCallback](api/cp/cp.config.textDroppedToDockIconCallback.md)
- * [developer](api/cp/cp.developer.md)
- * [dialog](api/cp/cp.dialog.md)
- * [feedback](api/cp/cp.feedback.md)
- * [ids](api/cp/cp.ids.md)
- * [idle](api/cp/cp.idle.md)
- * [just](api/cp/cp.just.md)
- * [localized](api/cp/cp.localized.md)
- * [plist](api/cp/cp.plist.md)
- * [archiver](api/cp/cp.plist.archiver.md)
- * [plugins](api/cp/cp.plugins.md)
- * [env](api/cp/cp.plugins.env.md)
- * [prop](api/cp/cp.prop.md)
- * [sourcewatcher](api/cp/cp.sourcewatcher.md)
- * [strings](api/cp/cp.strings.md)
- * source
- * [plist](api/cp/cp.strings.source.plist.md)
- * [table](api/cp/cp.strings.source.table.md)
- * [text](api/cp/cp.text.md)
- * [matcher](api/cp/cp.text.matcher.md)
- * [tools](api/cp/cp.tools.md)
- * [ui](api/cp/cp.ui.md)
- * [Alert](api/cp/cp.ui.Alert.md)
- * [axutils](api/cp/cp.ui.axutils.md)
- * [Button](api/cp/cp.ui.Button.md)
- * [CheckBox](api/cp/cp.ui.CheckBox.md)
- * [PopUpButton](api/cp/cp.ui.PopUpButton.md)
- * [RadioButton](api/cp/cp.ui.RadioButton.md)
- * [ScrollArea](api/cp/cp.ui.ScrollArea.md)
- * [Slider](api/cp/cp.ui.Slider.md)
- * [Table](api/cp/cp.ui.Table.md)
- * [TextField](api/cp/cp.ui.TextField.md)
- * [Window](api/cp/cp.ui.Window.md)
- * [utf16](api/cp/cp.utf16.md)
- * [be](api/cp/cp.utf16.be.md)
- * [le](api/cp/cp.utf16.le.md)
- * [watcher](api/cp/cp.watcher.md)
- * web
- * [generate](api/cp/cp.web.generate.md)
- * [html](api/cp/cp.web.html.md)
- * [text](api/cp/cp.web.text.md)
- * [ui](api/cp/cp.web.ui.md)
+ * [18n](api/cp/cp.18n.md)
+ * [aftereffects](api/cp/cp.adobe.aftereffects.md)
+ * [app](api/cp/cp.adobe.aftereffects.app.md)
+ * [shortcuts](api/cp/cp.adobe.aftereffects.shortcuts.md)
+ * [app](api/cp/cp.app.md)
+ * [menu](api/cp/cp.app.menu.md)
+ * [prefs](api/cp/cp.app.prefs.md)
+ * [commandeditor](api/cp/cp.apple.commandeditor.md)
+ * [compressor](api/cp/cp.apple.compressor.md)
+ * [app](api/cp/cp.apple.compressor.app.md)
+ * [fcpxml](api/cp/cp.apple.fcpxml.md)
+ * [compoundClip](api/cp/cp.apple.fcpxml.compoundClip.md)
+ * [event](api/cp/cp.apple.fcpxml.event.md)
+ * [gap](api/cp/cp.apple.fcpxml.gap.md)
+ * [multicamClip](api/cp/cp.apple.fcpxml.multicamClip.md)
+ * [multicamResource](api/cp/cp.apple.fcpxml.multicamResource.md)
+ * [project](api/cp/cp.apple.fcpxml.project.md)
+ * [resource](api/cp/cp.apple.fcpxml.resource.md)
+ * [secondaryStoryline](api/cp/cp.apple.fcpxml.secondaryStoryline.md)
+ * [title](api/cp/cp.apple.fcpxml.title.md)
+ * [finalcutpro](api/cp/cp.apple.finalcutpro.md)
+ * [app](api/cp/cp.apple.finalcutpro.app.md)
+ * [AppearanceAndFiltering](api/cp/cp.apple.finalcutpro.browser.AppearanceAndFiltering.md)
+ * [Columns](api/cp/cp.apple.finalcutpro.browser.Columns.md)
+ * [CommandEditor](api/cp/cp.apple.finalcutpro.cmd.CommandEditor.md)
+ * [Clip](api/cp/cp.apple.finalcutpro.content.Clip.md)
+ * [destinations](api/cp/cp.apple.finalcutpro.export.destinations.md)
+ * [ExportDialog](api/cp/cp.apple.finalcutpro.export.ExportDialog.md)
+ * [GoToPrompt](api/cp/cp.apple.finalcutpro.export.GoToPrompt.md)
+ * [ReplaceAlert](api/cp/cp.apple.finalcutpro.export.ReplaceAlert.md)
+ * [SaveSheet](api/cp/cp.apple.finalcutpro.export.SaveSheet.md)
+ * [MediaImport](api/cp/cp.apple.finalcutpro.import.MediaImport.md)
+ * [AudioComponent](api/cp/cp.apple.finalcutpro.inspector.audio.AudioComponent.md)
+ * [AudioConfiguration](api/cp/cp.apple.finalcutpro.inspector.audio.AudioConfiguration.md)
+ * [AudioInspector](api/cp/cp.apple.finalcutpro.inspector.audio.AudioInspector.md)
+ * [BaseMotionPanel](api/cp/cp.apple.finalcutpro.inspector.BaseMotionPanel.md)
+ * [BasePanel](api/cp/cp.apple.finalcutpro.inspector.BasePanel.md)
+ * [ColorBoard](api/cp/cp.apple.finalcutpro.inspector.color.ColorBoard.md)
+ * [ColorBoardAspect](api/cp/cp.apple.finalcutpro.inspector.color.ColorBoardAspect.md)
+ * [ColorCurve](api/cp/cp.apple.finalcutpro.inspector.color.ColorCurve.md)
+ * [ColorCurves](api/cp/cp.apple.finalcutpro.inspector.color.ColorCurves.md)
+ * [ColorInspector](api/cp/cp.apple.finalcutpro.inspector.color.ColorInspector.md)
+ * [ColorPuck](api/cp/cp.apple.finalcutpro.inspector.color.ColorPuck.md)
+ * [ColorWell](api/cp/cp.apple.finalcutpro.inspector.color.ColorWell.md)
+ * [ColorWheel](api/cp/cp.apple.finalcutpro.inspector.color.ColorWheel.md)
+ * [ColorWheels](api/cp/cp.apple.finalcutpro.inspector.color.ColorWheels.md)
+ * [CorrectionsBar](api/cp/cp.apple.finalcutpro.inspector.color.CorrectionsBar.md)
+ * [HueSaturationCurve](api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md)
+ * [HueSaturationCurves](api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurves.md)
+ * [ValueIndicator](api/cp/cp.apple.finalcutpro.inspector.color.ValueIndicator.md)
+ * [GeneratorInspector](api/cp/cp.apple.finalcutpro.inspector.generator.GeneratorInspector.md)
+ * [InfoInspector](api/cp/cp.apple.finalcutpro.inspector.info.InfoInspector.md)
+ * [InfoProjectInspector](api/cp/cp.apple.finalcutpro.inspector.info.InfoProjectInspector.md)
+ * [Inspector](api/cp/cp.apple.finalcutpro.inspector.Inspector.md)
+ * [InspectorProperty](api/cp/cp.apple.finalcutpro.inspector.InspectorProperty.md)
+ * [ShareInspector](api/cp/cp.apple.finalcutpro.inspector.share.ShareInspector.md)
+ * [TextInspector](api/cp/cp.apple.finalcutpro.inspector.text.TextInspector.md)
+ * [TitleInspector](api/cp/cp.apple.finalcutpro.inspector.title.TitleInspector.md)
+ * [TransitionInspector](api/cp/cp.apple.finalcutpro.inspector.transition.TransitionInspector.md)
+ * [VideoInspector](api/cp/cp.apple.finalcutpro.inspector.video.VideoInspector.md)
+ * [BackgroundTasksDialog](api/cp/cp.apple.finalcutpro.main.BackgroundTasksDialog.md)
+ * [Browser](api/cp/cp.apple.finalcutpro.main.Browser.md)
+ * [BrowserMarkerPopover](api/cp/cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.md)
+ * [EffectsBrowser](api/cp/cp.apple.finalcutpro.main.EffectsBrowser.md)
+ * [FindAndReplaceTitleText](api/cp/cp.apple.finalcutpro.main.FindAndReplaceTitleText.md)
+ * [FullScreenWindow](api/cp/cp.apple.finalcutpro.main.FullScreenWindow.md)
+ * [GeneratorsBrowser](api/cp/cp.apple.finalcutpro.main.GeneratorsBrowser.md)
+ * [KeywordEditor](api/cp/cp.apple.finalcutpro.main.KeywordEditor.md)
+ * [KeywordField](api/cp/cp.apple.finalcutpro.main.KeywordField.md)
+ * [LibrariesBrowser](api/cp/cp.apple.finalcutpro.main.LibrariesBrowser.md)
+ * [LibrariesFilmstrip](api/cp/cp.apple.finalcutpro.main.LibrariesFilmstrip.md)
+ * [LibrariesList](api/cp/cp.apple.finalcutpro.main.LibrariesList.md)
+ * [LibrariesSidebar](api/cp/cp.apple.finalcutpro.main.LibrariesSidebar.md)
+ * [MediaBrowser](api/cp/cp.apple.finalcutpro.main.MediaBrowser.md)
+ * [Playhead](api/cp/cp.apple.finalcutpro.main.Playhead.md)
+ * [PrimaryToolbar](api/cp/cp.apple.finalcutpro.main.PrimaryToolbar.md)
+ * [PrimaryWindow](api/cp/cp.apple.finalcutpro.main.PrimaryWindow.md)
+ * [SecondaryWindow](api/cp/cp.apple.finalcutpro.main.SecondaryWindow.md)
+ * [TranscodeMedia](api/cp/cp.apple.finalcutpro.main.TranscodeMedia.md)
+ * [menu](api/cp/cp.apple.finalcutpro.menu.md)
+ * [plugins](api/cp/cp.apple.finalcutpro.plugins.md)
+ * [guiscan](api/cp/cp.apple.finalcutpro.plugins.guiscan.md)
+ * [EditingPanel](api/cp/cp.apple.finalcutpro.prefs.EditingPanel.md)
+ * [GeneralPanel](api/cp/cp.apple.finalcutpro.prefs.GeneralPanel.md)
+ * [ImportPanel](api/cp/cp.apple.finalcutpro.prefs.ImportPanel.md)
+ * [Panel](api/cp/cp.apple.finalcutpro.prefs.Panel.md)
+ * [PlaybackPanel](api/cp/cp.apple.finalcutpro.prefs.PlaybackPanel.md)
+ * [PreferencesWindow](api/cp/cp.apple.finalcutpro.prefs.PreferencesWindow.md)
+ * [strings](api/cp/cp.apple.finalcutpro.strings.md)
+ * [Appearance](api/cp/cp.apple.finalcutpro.timeline.Appearance.md)
+ * [AudioRole](api/cp/cp.apple.finalcutpro.timeline.AudioRole.md)
+ * [AudioSubrole](api/cp/cp.apple.finalcutpro.timeline.AudioSubrole.md)
+ * [CaptionsRole](api/cp/cp.apple.finalcutpro.timeline.CaptionsRole.md)
+ * [CaptionsSubrole](api/cp/cp.apple.finalcutpro.timeline.CaptionsSubrole.md)
+ * [Contents](api/cp/cp.apple.finalcutpro.timeline.Contents.md)
+ * [Index](api/cp/cp.apple.finalcutpro.timeline.Index.md)
+ * [IndexCaptions](api/cp/cp.apple.finalcutpro.timeline.IndexCaptions.md)
+ * [IndexClips](api/cp/cp.apple.finalcutpro.timeline.IndexClips.md)
+ * [Type](api/cp/cp.apple.finalcutpro.timeline.IndexClips.Type.md)
+ * [IndexMode](api/cp/cp.apple.finalcutpro.timeline.IndexMode.md)
+ * [IndexRoles](api/cp/cp.apple.finalcutpro.timeline.IndexRoles.md)
+ * [IndexRolesArea](api/cp/cp.apple.finalcutpro.timeline.IndexRolesArea.md)
+ * [IndexRolesList](api/cp/cp.apple.finalcutpro.timeline.IndexRolesList.md)
+ * [IndexSection](api/cp/cp.apple.finalcutpro.timeline.IndexSection.md)
+ * [IndexTags](api/cp/cp.apple.finalcutpro.timeline.IndexTags.md)
+ * [Type](api/cp/cp.apple.finalcutpro.timeline.IndexTags.Type.md)
+ * [Role](api/cp/cp.apple.finalcutpro.timeline.Role.md)
+ * [SpeedPopover](api/cp/cp.apple.finalcutpro.timeline.SpeedPopover.md)
+ * [Timeline](api/cp/cp.apple.finalcutpro.timeline.Timeline.md)
+ * [Toolbar](api/cp/cp.apple.finalcutpro.timeline.Toolbar.md)
+ * [Browser](api/cp/cp.apple.finalcutpro.timeline.Toolbar.Browser.md)
+ * [Skimming](api/cp/cp.apple.finalcutpro.timeline.Toolbar.Skimming.md)
+ * [VideoRole](api/cp/cp.apple.finalcutpro.timeline.VideoRole.md)
+ * [VideoSubrole](api/cp/cp.apple.finalcutpro.timeline.VideoSubrole.md)
+ * [ControlBar](api/cp/cp.apple.finalcutpro.viewer.ControlBar.md)
+ * [InfoBar](api/cp/cp.apple.finalcutpro.viewer.InfoBar.md)
+ * [Viewer](api/cp/cp.apple.finalcutpro.viewer.Viewer.md)
+ * [motion](api/cp/cp.apple.motion.md)
+ * [app](api/cp/cp.apple.motion.app.md)
+ * [battery](api/cp/cp.battery.md)
+ * [bench](api/cp/cp.bench.md)
+ * [resolve](api/cp/cp.blackmagic.resolve.md)
+ * [app](api/cp/cp.blackmagic.resolve.app.md)
+ * [Color](api/cp/cp.blackmagic.resolve.color.Color.md)
+ * [Tracker](api/cp/cp.blackmagic.resolve.color.Tracker.md)
+ * [PrimaryWindow](api/cp/cp.blackmagic.resolve.main.PrimaryWindow.md)
+ * [choices](api/cp/cp.choices.md)
+ * [builder](api/cp/cp.choices.builder.md)
+ * [List](api/cp/cp.collect.List.md)
+ * [Queue](api/cp/cp.collect.Queue.md)
+ * [Set](api/cp/cp.collect.Set.md)
+ * [commands](api/cp/cp.commands.md)
+ * [command](api/cp/cp.commands.command.md)
+ * [englishKeyCodes](api/cp/cp.commands.englishKeyCodes.md)
+ * [shortcut](api/cp/cp.commands.shortcut.md)
+ * [builder](api/cp/cp.commands.shortcut.builder.md)
+ * [config](api/cp/cp.config.md)
+ * [dockIconClickCallback](api/cp/cp.config.dockIconClickCallback.md)
+ * [fileDroppedToDockIconCallback](api/cp/cp.config.fileDroppedToDockIconCallback.md)
+ * [shutdownCallback](api/cp/cp.config.shutdownCallback.md)
+ * [textDroppedToDockIconCallback](api/cp/cp.config.textDroppedToDockIconCallback.md)
+ * [history](api/cp/cp.console.history.md)
+ * [deferred](api/cp/cp.deferred.md)
+ * [delegator](api/cp/cp.delegator.md)
+ * [dev](api/cp/cp.dev.md)
+ * [dialog](api/cp/cp.dialog.md)
+ * [disk](api/cp/cp.disk.md)
+ * [docs](api/cp/cp.docs.md)
+ * [feedback](api/cp/cp.feedback.md)
+ * [highland2](api/cp/cp.highland2.md)
+ * [app](api/cp/cp.highland2.app.md)
+ * [Document](api/cp/cp.highland2.Document.md)
+ * [Sidebar](api/cp/cp.highland2.Sidebar.md)
+ * [language](api/cp/cp.i18n.language.md)
+ * [languageID](api/cp/cp.i18n.languageID.md)
+ * [localeID](api/cp/cp.i18n.localeID.md)
+ * [region](api/cp/cp.i18n.region.md)
+ * [script](api/cp/cp.i18n.script.md)
+ * [idle](api/cp/cp.idle.md)
+ * [ids](api/cp/cp.ids.md)
+ * [interpolate](api/cp/cp.interpolate.md)
+ * [is](api/cp/cp.is.md)
+ * [json](api/cp/cp.json.md)
+ * [just](api/cp/cp.just.md)
+ * [lazy](api/cp/cp.lazy.md)
+ * [localized](api/cp/cp.localized.md)
+ * [pattern](api/cp/cp.pattern.md)
+ * [plist](api/cp/cp.plist.md)
+ * [archiver](api/cp/cp.plist.archiver.md)
+ * [plistParser](api/cp/cp.plist.plistParser.md)
+ * [plugins](api/cp/cp.plugins.md)
+ * [env](api/cp/cp.plugins.env.md)
+ * [plugin](api/cp/cp.plugins.plugin.md)
+ * [prop](api/cp/cp.prop.md)
+ * [protect](api/cp/cp.protect.md)
+ * [rx](api/cp/cp.rx.md)
+ * [AsyncSubject](api/cp/cp.rx.AsyncSubject.md)
+ * [BehaviorSubject](api/cp/cp.rx.BehaviorSubject.md)
+ * [CooperativeScheduler](api/cp/cp.rx.CooperativeScheduler.md)
+ * [go](api/cp/cp.rx.go.md)
+ * [Do](api/cp/cp.rx.go.Do.md)
+ * [Then](api/cp/cp.rx.go.Do.Then.md)
+ * [Done](api/cp/cp.rx.go.Done.md)
+ * [First](api/cp/cp.rx.go.First.md)
+ * [Given](api/cp/cp.rx.go.Given.md)
+ * [Then](api/cp/cp.rx.go.Given.Then.md)
+ * [If](api/cp/cp.rx.go.If.md)
+ * [Are](api/cp/cp.rx.go.If.Are.md)
+ * [AreNot](api/cp/cp.rx.go.If.AreNot.md)
+ * [Is](api/cp/cp.rx.go.If.Is.md)
+ * [IsNot](api/cp/cp.rx.go.If.IsNot.md)
+ * [Matches](api/cp/cp.rx.go.If.Matches.md)
+ * [Then](api/cp/cp.rx.go.If.Then.md)
+ * [Otherwise](api/cp/cp.rx.go.If.Then.Otherwise.md)
+ * [Then](api/cp/cp.rx.go.If.Then.Otherwise.Then.md)
+ * [Last](api/cp/cp.rx.go.Last.md)
+ * [List](api/cp/cp.rx.go.List.md)
+ * [Sorted](api/cp/cp.rx.go.List.Sorted.md)
+ * [SortedBy](api/cp/cp.rx.go.List.SortedBy.md)
+ * [Require](api/cp/cp.rx.go.Require.md)
+ * [Are](api/cp/cp.rx.go.Require.Are.md)
+ * [AreNot](api/cp/cp.rx.go.Require.AreNot.md)
+ * [Is](api/cp/cp.rx.go.Require.Is.md)
+ * [IsNot](api/cp/cp.rx.go.Require.IsNot.md)
+ * [Matches](api/cp/cp.rx.go.Require.Matches.md)
+ * [Retry](api/cp/cp.rx.go.Retry.md)
+ * [Statement](api/cp/cp.rx.go.Statement.md)
+ * [Definition](api/cp/cp.rx.go.Statement.Definition.md)
+ * [Modifier](api/cp/cp.rx.go.Statement.Modifier.md)
+ * [Definition](api/cp/cp.rx.go.Statement.Modifier.Definition.md)
+ * [Throw](api/cp/cp.rx.go.Throw.md)
+ * [WaitUntil](api/cp/cp.rx.go.WaitUntil.md)
+ * [ImmediateScheduler](api/cp/cp.rx.ImmediateScheduler.md)
+ * [Observable](api/cp/cp.rx.Observable.md)
+ * [Observer](api/cp/cp.rx.Observer.md)
+ * [Reference](api/cp/cp.rx.Reference.md)
+ * [RelaySubject](api/cp/cp.rx.RelaySubject.md)
+ * [Subject](api/cp/cp.rx.Subject.md)
+ * [TimeoutScheduler](api/cp/cp.rx.TimeoutScheduler.md)
+ * [sourcewatcher](api/cp/cp.sourcewatcher.md)
+ * [spec](api/cp/cp.spec.md)
+ * [DefaultHandler](api/cp/cp.spec.DefaultHandler.md)
+ * [Definition](api/cp/cp.spec.Definition.md)
+ * [Error](api/cp/cp.spec.Error.md)
+ * [expect](api/cp/cp.spec.expect.md)
+ * [Handler](api/cp/cp.spec.Handler.md)
+ * [Message](api/cp/cp.spec.Message.md)
+ * [Report](api/cp/cp.spec.Report.md)
+ * [Run](api/cp/cp.spec.Run.md)
+ * [This](api/cp/cp.spec.Run.This.md)
+ * [Scenario](api/cp/cp.spec.Scenario.md)
+ * [Specification](api/cp/cp.spec.Specification.md)
+ * [TestCase](api/cp/cp.spec.TestCase.md)
+ * [Where](api/cp/cp.spec.Where.md)
+ * [strings](api/cp/cp.strings.md)
+ * [plist](api/cp/cp.strings.source.plist.md)
+ * [table](api/cp/cp.strings.source.table.md)
+ * [test](api/cp/cp.test.md)
+ * [text](api/cp/cp.text.md)
+ * [matcher](api/cp/cp.text.matcher.md)
+ * [flicks](api/cp/cp.time.flicks.md)
+ * [tools](api/cp/cp.tools.md)
+ * [Alert](api/cp/cp.ui.Alert.md)
+ * [axutils](api/cp/cp.ui.axutils.md)
+ * [Button](api/cp/cp.ui.Button.md)
+ * [Cell](api/cp/cp.ui.Cell.md)
+ * [CheckBox](api/cp/cp.ui.CheckBox.md)
+ * [ColorWell](api/cp/cp.ui.ColorWell.md)
+ * [Column](api/cp/cp.ui.Column.md)
+ * [ComboBox](api/cp/cp.ui.ComboBox.md)
+ * [Dialog](api/cp/cp.ui.Dialog.md)
+ * [DisclosureTriangle](api/cp/cp.ui.DisclosureTriangle.md)
+ * [Element](api/cp/cp.ui.Element.md)
+ * [ElementCache](api/cp/cp.ui.ElementCache.md)
+ * [Grid](api/cp/cp.ui.Grid.md)
+ * [Group](api/cp/cp.ui.Group.md)
+ * [Image](api/cp/cp.ui.Image.md)
+ * [List](api/cp/cp.ui.List.md)
+ * [Menu](api/cp/cp.ui.Menu.md)
+ * [MenuButton](api/cp/cp.ui.MenuButton.md)
+ * [notifier](api/cp/cp.ui.notifier.md)
+ * [Outline](api/cp/cp.ui.Outline.md)
+ * [Popover](api/cp/cp.ui.Popover.md)
+ * [PopUpButton](api/cp/cp.ui.PopUpButton.md)
+ * [PropertyRow](api/cp/cp.ui.PropertyRow.md)
+ * [RadioButton](api/cp/cp.ui.RadioButton.md)
+ * [RadioGroup](api/cp/cp.ui.RadioGroup.md)
+ * [Row](api/cp/cp.ui.Row.md)
+ * [ScrollArea](api/cp/cp.ui.ScrollArea.md)
+ * [ScrollBar](api/cp/cp.ui.ScrollBar.md)
+ * [SearchField](api/cp/cp.ui.SearchField.md)
+ * [Sheet](api/cp/cp.ui.Sheet.md)
+ * [Slider](api/cp/cp.ui.Slider.md)
+ * [SplitGroup](api/cp/cp.ui.SplitGroup.md)
+ * [Splitter](api/cp/cp.ui.Splitter.md)
+ * [StaticText](api/cp/cp.ui.StaticText.md)
+ * [Table](api/cp/cp.ui.Table.md)
+ * [TextArea](api/cp/cp.ui.TextArea.md)
+ * [TextField](api/cp/cp.ui.TextField.md)
+ * [Toolbar](api/cp/cp.ui.Toolbar.md)
+ * [Window](api/cp/cp.ui.Window.md)
+ * [utf16](api/cp/cp.utf16.md)
+ * [be](api/cp/cp.utf16.be.md)
+ * [le](api/cp/cp.utf16.le.md)
+ * [watcher](api/cp/cp.watcher.md)
+ * [block](api/cp/cp.web.block.md)
+ * [generate](api/cp/cp.web.generate.md)
+ * [html](api/cp/cp.web.html.md)
+ * [text](api/cp/cp.web.text.md)
+ * [ui](api/cp/cp.web.ui.md)
+ * [xml](api/cp/cp.web.xml.md)
## Bundled Plugins API
* [plugins](api/plugins/index.md)
- * core
- * [accessibility](api/plugins/plugins.core.accessibility.md)
- * action
- * [activator](api/plugins/plugins.core.action.activator.md)
- * [handler](api/plugins/plugins.core.action.handler.md)
- * [manager](api/plugins/plugins.core.action.manager.md)
- * commands
- * [actions](api/plugins/plugins.core.commands.actions.md)
- * [commandaction](api/plugins/plugins.core.commands.commandaction.md)
- * [global](api/plugins/plugins.core.commands.global.md)
- * [console](api/plugins/plugins.core.console.md)
- * helpandsupport
- * [credits](api/plugins/plugins.core.helpandsupport.credits.md)
- * [feedback](api/plugins/plugins.core.helpandsupport.feedback.md)
- * [userguide](api/plugins/plugins.core.helpandsupport.userguide.md)
- * [language](api/plugins/plugins.core.language.md)
- * menu
- * [bottom](api/plugins/plugins.core.menu.bottom.md)
- * [helpandsupport](api/plugins/plugins.core.menu.helpandsupport.md)
- * [commandpost](api/plugins/plugins.core.menu.helpandsupport.commandpost.md)
- * [manager](api/plugins/plugins.core.menu.manager.md)
- * [section](api/plugins/plugins.core.menu.manager.section.md)
- * [top](api/plugins/plugins.core.menu.top.md)
- * midi
- * [manager](api/plugins/plugins.core.midi.manager.md)
- * [controls](api/plugins/plugins.core.midi.manager.controls.md)
- * preferences
- * [advanced](api/plugins/plugins.core.preferences.advanced.md)
- * [general](api/plugins/plugins.core.preferences.general.md)
- * [manager](api/plugins/plugins.core.preferences.manager.md)
- * panels
- * [advanced](api/plugins/plugins.core.preferences.panels.advanced.md)
- * [general](api/plugins/plugins.core.preferences.panels.general.md)
- * [menubar](api/plugins/plugins.core.preferences.panels.menubar.md)
- * [midi](api/plugins/plugins.core.preferences.panels.midi.md)
- * [notifications](api/plugins/plugins.core.preferences.panels.notifications.md)
- * [plugins](api/plugins/plugins.core.preferences.panels.plugins.md)
- * [shortcuts](api/plugins/plugins.core.preferences.panels.shortcuts.md)
- * [streamdeck](api/plugins/plugins.core.preferences.panels.streamdeck.md)
- * [tangent](api/plugins/plugins.core.preferences.panels.tangent.md)
- * [touchbar](api/plugins/plugins.core.preferences.panels.touchbar.md)
- * [webapp](api/plugins/plugins.core.preferences.panels.webapp.md)
- * [updates](api/plugins/plugins.core.preferences.updates.md)
- * [quit](api/plugins/plugins.core.quit.md)
- * [setup](api/plugins/plugins.core.setup.md)
- * [panel](api/plugins/plugins.core.setup.panel.md)
- * streamdeck
- * [manager](api/plugins/plugins.core.streamdeck.manager.md)
- * touchbar
- * [manager](api/plugins/plugins.core.touchbar.manager.md)
- * [virtual](api/plugins/plugins.core.touchbar.manager.virtual.md)
- * [updateLocationCallback](api/plugins/plugins.core.touchbar.manager.virtual.updateLocationCallback.md)
- * [widgets](api/plugins/plugins.core.touchbar.manager.widgets.md)
- * widgets
- * [volume](api/plugins/plugins.core.touchbar.widgets.volume.md)
- * [windowSlide](api/plugins/plugins.core.touchbar.widgets.windowSlide.md)
- * watchfolders
- * [manager](api/plugins/plugins.core.watchfolders.manager.md)
- * [panel](api/plugins/plugins.core.watchfolders.manager.panel.md)
- * [webapp](api/plugins/plugins.core.webapp.md)
- * compressor
- * watchfolders
- * panels
- * [media](api/plugins/plugins.compressor.watchfolders.panels.media.md)
- * finalcutpro
- * commands
- * [actions](api/plugins/plugins.finalcutpro.commands.actions.md)
- * browser
- * [addnote](api/plugins/plugins.finalcutpro.browser.addnote.md)
- * [keywords](api/plugins/plugins.finalcutpro.browser.keywords.md)
- * [playhead](api/plugins/plugins.finalcutpro.browser.playhead.md)
- * clipboard
- * [history](api/plugins/plugins.finalcutpro.clipboard.history.md)
- * [manager](api/plugins/plugins.finalcutpro.clipboard.manager.md)
- * [shared](api/plugins/plugins.finalcutpro.clipboard.shared.md)
- * [commands](api/plugins/plugins.finalcutpro.commands.md)
- * [console](api/plugins/plugins.finalcutpro.console.md)
- * export
- * [batch](api/plugins/plugins.finalcutpro.export.batch.md)
- * feedback
- * [bugreport](api/plugins/plugins.finalcutpro.feedback.bugreport.md)
- * fullscreen
- * [shortcuts](api/plugins/plugins.finalcutpro.fullscreen.shortcuts.md)
- * hacks
- * [backupinterval](api/plugins/plugins.finalcutpro.hacks.backupinterval.md)
- * [movingmarkers](api/plugins/plugins.finalcutpro.hacks.movingmarkers.md)
- * [playbackrendering](api/plugins/plugins.finalcutpro.hacks.playbackrendering.md)
- * [shortcuts](api/plugins/plugins.finalcutpro.hacks.shortcuts.md)
- * [smartcollectionslabel](api/plugins/plugins.finalcutpro.hacks.smartcollectionslabel.md)
- * [hud](api/plugins/plugins.finalcutpro.hud.md)
- * import
- * [ignorecard](api/plugins/plugins.finalcutpro.import.ignorecard.md)
- * [preferences](api/plugins/plugins.finalcutpro.import.preferences.md)
- * [language](api/plugins/plugins.finalcutpro.language.md)
- * menu
- * [administrator](api/plugins/plugins.finalcutpro.menu.administrator.md)
- * [advancedfeatures](api/plugins/plugins.finalcutpro.menu.administrator.advancedfeatures.md)
- * [clipboard](api/plugins/plugins.finalcutpro.menu.clipboard.md)
- * helpandsupport
- * [finalcutpro](api/plugins/plugins.finalcutpro.menu.helpandsupport.finalcutpro.md)
- * [mediaimport](api/plugins/plugins.finalcutpro.menu.mediaimport.md)
- * [menuaction](api/plugins/plugins.finalcutpro.menu.menuaction.md)
- * [proxyicon](api/plugins/plugins.finalcutpro.menu.proxyicon.md)
- * [timeline](api/plugins/plugins.finalcutpro.menu.timeline.md)
- * [assignshortcuts](api/plugins/plugins.finalcutpro.menu.timeline.assignshortcuts.md)
- * [tools](api/plugins/plugins.finalcutpro.menu.tools.md)
- * [notifications](api/plugins/plugins.finalcutpro.menu.tools.notifications.md)
- * [top](api/plugins/plugins.finalcutpro.menu.top.md)
- * [viewer](api/plugins/plugins.finalcutpro.menu.viewer.md)
- * [showtimecode](api/plugins/plugins.finalcutpro.menu.viewer.showtimecode.md)
- * midi
- * controls
- * [colorboard](api/plugins/plugins.finalcutpro.midi.controls.colorboard.md)
- * [zoom](api/plugins/plugins.finalcutpro.midi.controls.zoom.md)
- * [manager](api/plugins/plugins.finalcutpro.midi.manager.md)
- * notifications
- * [imessage](api/plugins/plugins.finalcutpro.notifications.imessage.md)
- * [manager](api/plugins/plugins.finalcutpro.notifications.manager.md)
- * [prowl](api/plugins/plugins.finalcutpro.notifications.prowl.md)
- * [pushover](api/plugins/plugins.finalcutpro.notifications.pushover.md)
- * [open](api/plugins/plugins.finalcutpro.open.md)
- * os
- * [voice](api/plugins/plugins.finalcutpro.os.voice.md)
- * preferences
- * panels
- * [finalcutpro](api/plugins/plugins.finalcutpro.preferences.panels.finalcutpro.md)
- * [scanfinalcutpro](api/plugins/plugins.finalcutpro.preferences.scanfinalcutpro.md)
- * sharing
- * [xml](api/plugins/plugins.finalcutpro.sharing.xml.md)
- * [streamdeck](api/plugins/plugins.finalcutpro.streamdeck.md)
- * tangent
- [manager](api/plugins/plugins.finalcutpro.tangent.manager.md)
- * [text2speech](api/plugins/plugins.finalcutpro.text2speech.md)
- * timeline
- * [audioeffects](api/plugins/plugins.finalcutpro.timeline.audioeffects.md)
- * [colorboard](api/plugins/plugins.finalcutpro.timeline.colorboard.md)
- * [commandsetactions](api/plugins/plugins.finalcutpro.timeline.commandsetactions.md)
- * [disablewaveforms](api/plugins/plugins.finalcutpro.timeline.disablewaveforms.md)
- * [effects](api/plugins/plugins.finalcutpro.timeline.effects.md)
- * [generators](api/plugins/plugins.finalcutpro.timeline.generators.md)
- * [height](api/plugins/plugins.finalcutpro.timeline.height.md)
- * [lanes](api/plugins/plugins.finalcutpro.timeline.lanes.md)
- * [matchframe](api/plugins/plugins.finalcutpro.timeline.matchframe.md)
- * [mousezoom](api/plugins/plugins.finalcutpro.timeline.mousezoom.md)
- * [movetoplayhead](api/plugins/plugins.finalcutpro.timeline.movetoplayhead.md)
- * [multicam](api/plugins/plugins.finalcutpro.timeline.multicam.md)
- * [playback](api/plugins/plugins.finalcutpro.timeline.playback.md)
- * [playhead](api/plugins/plugins.finalcutpro.timeline.playhead.md)
- * [pluginactions](api/plugins/plugins.finalcutpro.timeline.pluginactions.md)
- * [pluginshortcuts](api/plugins/plugins.finalcutpro.timeline.pluginshortcuts.md)
- * [pluginshortcuts](api/plugins/plugins.finalcutpro.timeline.pluginshortcuts.md)
- * [preferences](api/plugins/plugins.finalcutpro.timeline.preferences.md)
- * [selectalltimelineclips](api/plugins/plugins.finalcutpro.timeline.selectalltimelineclips.md)
- * [stabilization](api/plugins/plugins.finalcutpro.timeline.stabilization.md)
- * [titles](api/plugins/plugins.finalcutpro.timeline.titles.md)
- * [transitions](api/plugins/plugins.finalcutpro.timeline.transitions.md)
- * [videoeffects](api/plugins/plugins.finalcutpro.timeline.videoeffects.md)
- * [zoomtoselection](api/plugins/plugins.finalcutpro.timeline.zoomtoselection.md)
- * touchbar
- * [virtual](api/plugins/plugins.finalcutpro.touchbar.virtual.md)
- * widgets
- * [colorboard](api/plugins/plugins.finalcutpro.touchbar.widgets.colorboard.md)
- * [zoom](api/plugins/plugins.finalcutpro.touchbar.widgets.zoom.md)
- * viewer
- * [showtimecode](api/plugins/plugins.finalcutpro.viewer.showtimecode.md)
- * [showtimelineinplayer](api/plugins/plugins.finalcutpro.viewer.showtimelineinplayer.md)
- * [timecodeoverlay](api/plugins/plugins.finalcutpro.viewer.timecodeoverlay.md)
- * watchfolders
- * panels
- * [fcpxml](api/plugins/plugins.finalcutpro.watchfolders.panels.fcpxml.md)
- * [media](api/plugins/plugins.finalcutpro.watchfolders.panels.media.md)
- * watchers
- * [preferences](api/plugins/plugins.finalcutpro.watchers.preferences.md)
- * [version](api/plugins/plugins.finalcutpro.watchers.version.md)
+ * [manager](api/plugins/plugins.aftereffects.application.manager.md)
+ * [effects](api/plugins/plugins.aftereffects.effects.md)
+ * [preferences](api/plugins/plugins.aftereffects.preferences.md)
+ * [shortcuts](api/plugins/plugins.aftereffects.shortcuts.md)
+ * [manager](api/plugins/plugins.aftereffects.tangent.manager.md)
+ * [manager](api/plugins/plugins.compressor.application.manager.md)
+ * [bugreport](api/plugins/plugins.compressor.feedback.bugreport.md)
+ * [media](api/plugins/plugins.compressor.watchfolders.panels.media.md)
+ * [accessibility](api/plugins/plugins.core.accessibility.md)
+ * [screenrecording](api/plugins/plugins.core.accessibility.screenrecording.md)
+ * [activator](api/plugins/plugins.core.action.activator.md)
+ * [handler](api/plugins/plugins.core.action.handler.md)
+ * [manager](api/plugins/plugins.core.action.manager.md)
+ * [manager](api/plugins/plugins.core.application.manager.md)
+ * [prefs](api/plugins/plugins.core.audioswift.prefs.md)
+ * [actions](api/plugins/plugins.core.commands.actions.md)
+ * [global](api/plugins/plugins.core.commands.global.md)
+ * [console](api/plugins/plugins.core.console.md)
+ * [applications](api/plugins/plugins.core.console.applications.md)
+ * [keyboardmaestromacros](api/plugins/plugins.core.console.keyboardmaestromacros.md)
+ * [scripts](api/plugins/plugins.core.console.scripts.md)
+ * [manager](api/plugins/plugins.core.controlsurfaces.manager.md)
+ * [automount](api/plugins/plugins.core.disk.automount.md)
+ * [favourites](api/plugins/plugins.core.disk.favourites.md)
+ * [display](api/plugins/plugins.core.display.md)
+ * [prefs](api/plugins/plugins.core.gamepad.prefs.md)
+ * [credits](api/plugins/plugins.core.helpandsupport.credits.md)
+ * [debugconsole](api/plugins/plugins.core.helpandsupport.debugconsole.md)
+ * [developerguide](api/plugins/plugins.core.helpandsupport.developerguide.md)
+ * [donate](api/plugins/plugins.core.helpandsupport.donate.md)
+ * [facebook](api/plugins/plugins.core.helpandsupport.facebook.md)
+ * [feedback](api/plugins/plugins.core.helpandsupport.feedback.md)
+ * [userguide](api/plugins/plugins.core.helpandsupport.userguide.md)
+ * [language](api/plugins/plugins.core.language.md)
+ * [prefs](api/plugins/plugins.core.loupedeck.prefs.md)
+ * [manager](api/plugins/plugins.core.loupedeckctandlive.manager.md)
+ * [prefs](api/plugins/plugins.core.loupedeckctandlive.prefs.md)
+ * [prefs](api/plugins/plugins.core.loupedeckplus.prefs.md)
+ * [manager](api/plugins/plugins.core.menu.manager.md)
+ * [section](api/plugins/plugins.core.menu.manager.section.md)
+ * [menuaction](api/plugins/plugins.core.menu.menuaction.md)
+ * [manager](api/plugins/plugins.core.midi.manager.md)
+ * [controls](api/plugins/plugins.core.midi.manager.controls.md)
+ * [prefs](api/plugins/plugins.core.midi.prefs.md)
+ * [prefs](api/plugins/plugins.core.monogram.prefs.md)
+ * [history](api/plugins/plugins.core.pasteboard.history.md)
+ * [general](api/plugins/plugins.core.preferences.general.md)
+ * [manager](api/plugins/plugins.core.preferences.manager.md)
+ * [panel](api/plugins/plugins.core.preferences.manager.panel.md)
+ * [general](api/plugins/plugins.core.preferences.panels.general.md)
+ * [menubar](api/plugins/plugins.core.preferences.panels.menubar.md)
+ * [notifications](api/plugins/plugins.core.preferences.panels.notifications.md)
+ * [plugins](api/plugins/plugins.core.preferences.panels.plugins.md)
+ * [scripting](api/plugins/plugins.core.preferences.panels.scripting.md)
+ * [settings](api/plugins/plugins.core.preferences.panels.settings.md)
+ * [updates](api/plugins/plugins.core.preferences.updates.md)
+ * [setup](api/plugins/plugins.core.setup.md)
+ * [panel](api/plugins/plugins.core.setup.panel.md)
+ * [actions](api/plugins/plugins.core.shortcuts.actions.md)
+ * [prefs](api/plugins/plugins.core.shortcuts.prefs.md)
+ * [manager](api/plugins/plugins.core.streamdeck.manager.md)
+ * [prefs](api/plugins/plugins.core.streamdeck.prefs.md)
+ * [manager](api/plugins/plugins.core.tangent.manager.md)
+ * [action](api/plugins/plugins.core.tangent.manager.action.md)
+ * [binding](api/plugins/plugins.core.tangent.manager.binding.md)
+ * [connection](api/plugins/plugins.core.tangent.manager.connection.md)
+ * [controls](api/plugins/plugins.core.tangent.manager.controls.md)
+ * [group](api/plugins/plugins.core.tangent.manager.group.md)
+ * [menu](api/plugins/plugins.core.tangent.manager.menu.md)
+ * [mode](api/plugins/plugins.core.tangent.manager.mode.md)
+ * [named](api/plugins/plugins.core.tangent.manager.named.md)
+ * [parameter](api/plugins/plugins.core.tangent.manager.parameter.md)
+ * [prefs](api/plugins/plugins.core.tangent.prefs.md)
+ * [manager](api/plugins/plugins.core.toolbox.manager.md)
+ * [caffeinate](api/plugins/plugins.core.tools.caffeinate.md)
+ * [banks](api/plugins/plugins.core.touchbar.banks.md)
+ * [location](api/plugins/plugins.core.touchbar.location.md)
+ * [manager](api/plugins/plugins.core.touchbar.manager.md)
+ * [widgets](api/plugins/plugins.core.touchbar.manager.widgets.md)
+ * [prefs](api/plugins/plugins.core.touchbar.prefs.md)
+ * [virtual](api/plugins/plugins.core.touchbar.virtual.md)
+ * [volume](api/plugins/plugins.core.touchbar.widgets.volume.md)
+ * [windowSlide](api/plugins/plugins.core.touchbar.widgets.windowSlide.md)
+ * [changeapplications](api/plugins/plugins.core.tourbox.changeapplications.md)
+ * [manager](api/plugins/plugins.core.tourbox.manager.md)
+ * [prefs](api/plugins/plugins.core.tourbox.prefs.md)
+ * [panel](api/plugins/plugins.core.utilities.manager.panel.md)
+ * [manager](api/plugins/plugins.core.watchfolders.manager.md)
+ * [panel](api/plugins/plugins.core.watchfolders.manager.panel.md)
+ * [menuitem](api/plugins/plugins.core.watchfolders.menuitem.md)
+ * [manager](api/plugins/plugins.diskutility.application.manager.md)
+ * [manager](api/plugins/plugins.ecammlive.application.manager.md)
+ * [custom](api/plugins/plugins.finalcutpro.actions.custom.md)
+ * [backupinterval](api/plugins/plugins.finalcutpro.advanced.backupinterval.md)
+ * [disablewaveforms](api/plugins/plugins.finalcutpro.advanced.disablewaveforms.md)
+ * [fcpxml](api/plugins/plugins.finalcutpro.advanced.fcpxml.md)
+ * [multicam](api/plugins/plugins.finalcutpro.advanced.multicam.md)
+ * [playbackrendering](api/plugins/plugins.finalcutpro.advanced.playbackrendering.md)
+ * [showtimelineinviewers](api/plugins/plugins.finalcutpro.advanced.showtimelineinviewers.md)
+ * [manager](api/plugins/plugins.finalcutpro.application.manager.md)
+ * [addnote](api/plugins/plugins.finalcutpro.browser.addnote.md)
+ * [appearanceandfiltering](api/plugins/plugins.finalcutpro.browser.appearanceandfiltering.md)
+ * [clearnotes](api/plugins/plugins.finalcutpro.browser.clearnotes.md)
+ * [csv](api/plugins/plugins.finalcutpro.browser.csv.md)
+ * [duration](api/plugins/plugins.finalcutpro.browser.duration.md)
+ * [frameiotomarkers](api/plugins/plugins.finalcutpro.browser.frameiotomarkers.md)
+ * [height](api/plugins/plugins.finalcutpro.browser.height.md)
+ * [insertvertical](api/plugins/plugins.finalcutpro.browser.insertvertical.md)
+ * [keywords](api/plugins/plugins.finalcutpro.browser.keywords.md)
+ * [layouts](api/plugins/plugins.finalcutpro.browser.layouts.md)
+ * [pasteboardtomarkers](api/plugins/plugins.finalcutpro.browser.pasteboardtomarkers.md)
+ * [playhead](api/plugins/plugins.finalcutpro.browser.playhead.md)
+ * [selectlibrary](api/plugins/plugins.finalcutpro.browser.selectlibrary.md)
+ * [soloclip](api/plugins/plugins.finalcutpro.browser.soloclip.md)
+ * [commands](api/plugins/plugins.finalcutpro.commands.md)
+ * [actions](api/plugins/plugins.finalcutpro.commands.actions.md)
+ * [console](api/plugins/plugins.finalcutpro.console.md)
+ * [font](api/plugins/plugins.finalcutpro.console.font.md)
+ * [batch](api/plugins/plugins.finalcutpro.export.batch.md)
+ * [manager](api/plugins/plugins.finalcutpro.export.batch.manager.md)
+ * [panel](api/plugins/plugins.finalcutpro.export.batch.manager.panel.md)
+ * [bugreport](api/plugins/plugins.finalcutpro.feedback.bugreport.md)
+ * [disableesc](api/plugins/plugins.finalcutpro.fullscreen.disableesc.md)
+ * [dockicon](api/plugins/plugins.finalcutpro.fullscreen.dockicon.md)
+ * [shortcuts](api/plugins/plugins.finalcutpro.fullscreen.shortcuts.md)
+ * [stopped](api/plugins/plugins.finalcutpro.fullscreen.stopped.md)
+ * [manager](api/plugins/plugins.finalcutpro.hud.manager.md)
+ * [fcpxml](api/plugins/plugins.finalcutpro.hud.panels.fcpxml.md)
+ * [info](api/plugins/plugins.finalcutpro.hud.panels.info.md)
+ * [minimise](api/plugins/plugins.finalcutpro.hud.panels.minimise.md)
+ * [notes](api/plugins/plugins.finalcutpro.hud.panels.notes.md)
+ * [pasteboard](api/plugins/plugins.finalcutpro.hud.panels.pasteboard.md)
+ * [rename](api/plugins/plugins.finalcutpro.hud.panels.rename.md)
+ * [search](api/plugins/plugins.finalcutpro.hud.panels.search.md)
+ * [tenbuttons](api/plugins/plugins.finalcutpro.hud.panels.tenbuttons.md)
+ * [twelvebuttons](api/plugins/plugins.finalcutpro.hud.panels.twelvebuttons.md)
+ * [twentyfourbuttons](api/plugins/plugins.finalcutpro.hud.panels.twentyfourbuttons.md)
+ * [ignorecard](api/plugins/plugins.finalcutpro.import.ignorecard.md)
+ * [preferences](api/plugins/plugins.finalcutpro.import.preferences.md)
+ * [audio](api/plugins/plugins.finalcutpro.inspector.audio.md)
+ * [info](api/plugins/plugins.finalcutpro.inspector.info.md)
+ * [show](api/plugins/plugins.finalcutpro.inspector.show.md)
+ * [text](api/plugins/plugins.finalcutpro.inspector.text.md)
+ * [video](api/plugins/plugins.finalcutpro.inspector.video.md)
+ * [language](api/plugins/plugins.finalcutpro.language.md)
+ * [manager](api/plugins/plugins.finalcutpro.menu.manager.md)
+ * [menuaction](api/plugins/plugins.finalcutpro.menu.menuaction.md)
+ * [proxyicon](api/plugins/plugins.finalcutpro.menu.proxyicon.md)
+ * [audio](api/plugins/plugins.finalcutpro.midi.controls.audio.md)
+ * [colorboard](api/plugins/plugins.finalcutpro.midi.controls.colorboard.md)
+ * [colorwheels](api/plugins/plugins.finalcutpro.midi.controls.colorwheels.md)
+ * [absolute](api/plugins/plugins.finalcutpro.midi.controls.controlui.absolute.md)
+ * [relative](api/plugins/plugins.finalcutpro.midi.controls.controlui.relative.md)
+ * [timeline](api/plugins/plugins.finalcutpro.midi.controls.timeline.md)
+ * [video](api/plugins/plugins.finalcutpro.midi.controls.video.md)
+ * [zoom](api/plugins/plugins.finalcutpro.midi.controls.zoom.md)
+ * [ifttt](api/plugins/plugins.finalcutpro.notifications.ifttt.md)
+ * [imessage](api/plugins/plugins.finalcutpro.notifications.imessage.md)
+ * [manager](api/plugins/plugins.finalcutpro.notifications.manager.md)
+ * [prowl](api/plugins/plugins.finalcutpro.notifications.prowl.md)
+ * [pushover](api/plugins/plugins.finalcutpro.notifications.pushover.md)
+ * [open](api/plugins/plugins.finalcutpro.open.md)
+ * [history](api/plugins/plugins.finalcutpro.pasteboard.history.md)
+ * [manager](api/plugins/plugins.finalcutpro.pasteboard.manager.md)
+ * [shared](api/plugins/plugins.finalcutpro.pasteboard.shared.md)
+ * [clearcache](api/plugins/plugins.finalcutpro.preferences.clearcache.md)
+ * [general](api/plugins/plugins.finalcutpro.preferences.general.md)
+ * [manager](api/plugins/plugins.finalcutpro.preferences.manager.md)
+ * [spelling](api/plugins/plugins.finalcutpro.preferences.spelling.md)
+ * [scan](api/plugins/plugins.finalcutpro.setup.scan.md)
+ * [audio](api/plugins/plugins.finalcutpro.tangent.audio.md)
+ * [browser](api/plugins/plugins.finalcutpro.tangent.browser.md)
+ * [clip](api/plugins/plugins.finalcutpro.tangent.clip.md)
+ * [color](api/plugins/plugins.finalcutpro.tangent.color.md)
+ * [functions](api/plugins/plugins.finalcutpro.tangent.commandpost.functions.md)
+ * [common](api/plugins/plugins.finalcutpro.tangent.common.md)
+ * [edit](api/plugins/plugins.finalcutpro.tangent.edit.md)
+ * [features](api/plugins/plugins.finalcutpro.tangent.features.md)
+ * [generator](api/plugins/plugins.finalcutpro.tangent.generator.md)
+ * [info](api/plugins/plugins.finalcutpro.tangent.info.md)
+ * [manager](api/plugins/plugins.finalcutpro.tangent.manager.md)
+ * [new](api/plugins/plugins.finalcutpro.tangent.new.md)
+ * [open](api/plugins/plugins.finalcutpro.tangent.open.md)
+ * [os](api/plugins/plugins.finalcutpro.tangent.os.md)
+ * [display](api/plugins/plugins.finalcutpro.tangent.os.display.md)
+ * [pasteboard](api/plugins/plugins.finalcutpro.tangent.os.pasteboard.md)
+ * [sound](api/plugins/plugins.finalcutpro.tangent.os.sound.md)
+ * [window](api/plugins/plugins.finalcutpro.tangent.os.window.md)
+ * [overlay](api/plugins/plugins.finalcutpro.tangent.overlay.md)
+ * [pasteboard](api/plugins/plugins.finalcutpro.tangent.pasteboard.md)
+ * [playback](api/plugins/plugins.finalcutpro.tangent.playback.md)
+ * [share](api/plugins/plugins.finalcutpro.tangent.share.md)
+ * [text](api/plugins/plugins.finalcutpro.tangent.text.md)
+ * [timeline](api/plugins/plugins.finalcutpro.tangent.timeline.md)
+ * [title](api/plugins/plugins.finalcutpro.tangent.title.md)
+ * [transition](api/plugins/plugins.finalcutpro.tangent.transition.md)
+ * [trim](api/plugins/plugins.finalcutpro.tangent.trim.md)
+ * [video](api/plugins/plugins.finalcutpro.tangent.video.md)
+ * [view](api/plugins/plugins.finalcutpro.tangent.view.md)
+ * [viewer](api/plugins/plugins.finalcutpro.tangent.viewer.md)
+ * [workspaces](api/plugins/plugins.finalcutpro.tangent.workspaces.md)
+ * [text2speech](api/plugins/plugins.finalcutpro.text2speech.md)
+ * [audioeffects](api/plugins/plugins.finalcutpro.timeline.audioeffects.md)
+ * [captions](api/plugins/plugins.finalcutpro.timeline.captions.md)
+ * [clipnavigation](api/plugins/plugins.finalcutpro.timeline.clipnavigation.md)
+ * [colorboard](api/plugins/plugins.finalcutpro.timeline.colorboard.md)
+ * [colorwheels](api/plugins/plugins.finalcutpro.timeline.colorwheels.md)
+ * [commandsetactions](api/plugins/plugins.finalcutpro.timeline.commandsetactions.md)
+ * [csv](api/plugins/plugins.finalcutpro.timeline.csv.md)
+ * [generators](api/plugins/plugins.finalcutpro.timeline.generators.md)
+ * [height](api/plugins/plugins.finalcutpro.timeline.height.md)
+ * [lanes](api/plugins/plugins.finalcutpro.timeline.lanes.md)
+ * [matchframe](api/plugins/plugins.finalcutpro.timeline.matchframe.md)
+ * [mousezoom](api/plugins/plugins.finalcutpro.timeline.mousezoom.md)
+ * [movetoplayhead](api/plugins/plugins.finalcutpro.timeline.movetoplayhead.md)
+ * [multicam](api/plugins/plugins.finalcutpro.timeline.multicam.md)
+ * [navigation](api/plugins/plugins.finalcutpro.timeline.navigation.md)
+ * [playback](api/plugins/plugins.finalcutpro.timeline.playback.md)
+ * [playhead](api/plugins/plugins.finalcutpro.timeline.playhead.md)
+ * [pluginactions](api/plugins/plugins.finalcutpro.timeline.pluginactions.md)
+ * [preferences](api/plugins/plugins.finalcutpro.timeline.preferences.md)
+ * [renameclip](api/plugins/plugins.finalcutpro.timeline.renameclip.md)
+ * [selectalltimelineclips](api/plugins/plugins.finalcutpro.timeline.selectalltimelineclips.md)
+ * [speed](api/plugins/plugins.finalcutpro.timeline.speed.md)
+ * [titles](api/plugins/plugins.finalcutpro.timeline.titles.md)
+ * [transcode](api/plugins/plugins.finalcutpro.timeline.transcode.md)
+ * [transitions](api/plugins/plugins.finalcutpro.timeline.transitions.md)
+ * [videoeffects](api/plugins/plugins.finalcutpro.timeline.videoeffects.md)
+ * [zoom](api/plugins/plugins.finalcutpro.timeline.zoom.md)
+ * [zoomtoselection](api/plugins/plugins.finalcutpro.timeline.zoomtoselection.md)
+ * [fcpxmltitles](api/plugins/plugins.finalcutpro.toolbox.fcpxmltitles.md)
+ * [manager](api/plugins/plugins.finalcutpro.touchbar.manager.md)
+ * [virtual](api/plugins/plugins.finalcutpro.touchbar.virtual.md)
+ * [colorboard](api/plugins/plugins.finalcutpro.touchbar.widgets.colorboard.md)
+ * [duration](api/plugins/plugins.finalcutpro.touchbar.widgets.duration.md)
+ * [height](api/plugins/plugins.finalcutpro.touchbar.widgets.height.md)
+ * [zoom](api/plugins/plugins.finalcutpro.touchbar.widgets.zoom.md)
+ * [actions](api/plugins/plugins.finalcutpro.viewer.actions.md)
+ * [overlays](api/plugins/plugins.finalcutpro.viewer.overlays.md)
+ * [fcpxml](api/plugins/plugins.finalcutpro.watchfolders.fcpxml.md)
+ * [media](api/plugins/plugins.finalcutpro.watchfolders.media.md)
+ * [MediaFolder](api/plugins/plugins.finalcutpro.watchfolders.media.MediaFolder.md)
+ * [panel](api/plugins/plugins.finalcutpro.watchfolders.media.panel.md)
+ * [manager](api/plugins/plugins.finder.application.manager.md)
+ * [audio](api/plugins/plugins.finder.audio.md)
+ * [dateandtime](api/plugins/plugins.finder.dateandtime.md)
+ * [pasteboard](api/plugins/plugins.finder.pasteboard.md)
+ * [history](api/plugins/plugins.finder.pasteboard.history.md)
+ * [panel](api/plugins/plugins.finder.preferences.panel.md)
+ * [powerchime](api/plugins/plugins.finder.preferences.powerchime.md)
+ * [window](api/plugins/plugins.finder.window.md)
+ * [manager](api/plugins/plugins.microsoftteams.application.manager.md)
+ * [manager](api/plugins/plugins.motion.application.manager.md)
+ * [bugreport](api/plugins/plugins.motion.feedback.bugreport.md)
+ * [manager](api/plugins/plugins.resolve.application.manager.md)
+ * [emulation ===
](api/plugins/plugins.resolve.tangent.emulation ===
.md)
+ * [manager](api/plugins/plugins.resolve.tangent.manager.md)
+ * [manager](api/plugins/plugins.skype.application.manager.md)
+ * [shortcuts](api/plugins/plugins.skype.shortcuts.md)
+ * [manager](api/plugins/plugins.systempreferences.application.manager.md)
+ * [manager](api/plugins/plugins.textedit.application.manager.md)
+ * [manager](api/plugins/plugins.zoom.application.manager.md)
## Hammerspoon API
* [hs](api/hs/hs.md)
- * [alert](api/hs/hs.alert.md)
- * [appfinder](api/hs/hs.appfinder.md)
- * [applescript](api/hs/hs.applescript.md)
- * [application](api/hs/hs.application.md)
- * [watcher](api/hs/hs.application.watcher.md)
- * [audiodevice](api/hs/hs.audiodevice.md)
- * [datasource](api/hs/hs.audiodevice.datasource.md)
- * [watcher](api/hs/hs.audiodevice.watcher.md)
- * [base64](api/hs/hs.base64.md)
- * [battery](api/hs/hs.battery.md)
- * [watcher](api/hs/hs.battery.watcher.md)
- * [brightness](api/hs/hs.brightness.md)
- * [caffeinate](api/hs/hs.caffeinate.md)
- * [watcher](api/hs/hs.caffeinate.watcher.md)
- * [canvas](api/hs/hs.canvas.md)
- * [drawing](api/hs/hs.canvas.drawing.md)
- * [matrix](api/hs/hs.canvas.matrix.md)
- * [chooser](api/hs/hs.chooser.md)
- * [console](api/hs/hs.console.md)
- * [crash](api/hs/hs.crash.md)
- * [deezer](api/hs/hs.deezer.md)
- * [dialog](api/hs/hs.dialog.md)
- * [distributednotifications](api/hs/hs.distributednotifications.md)
- * [doc](api/hs/hs.doc.md)
- * [builder](api/hs/hs.doc.builder.md)
- * [hsdocs](api/hs/hs.doc.hsdocs.md)
- * [markdown](api/hs/hs.doc.markdown.md)
- * [spoonsupport](api/hs/hs.doc.spoonsupport.md)
- * [dockicon](api/hs/hs.dockicon.md)
- * [drawing](api/hs/hs.drawing.md)
- * [color](api/hs/hs.drawing.color.md)
- * [eventtap](api/hs/hs.eventtap.md)
- * [event](api/hs/hs.eventtap.event.md)
- * [expose](api/hs/hs.expose.md)
- * [fnutils](api/hs/hs.fnutils.md)
- * [fs](api/hs/hs.fs.md)
- * [volume](api/hs/hs.fs.volume.md)
- * [geometry](api/hs/hs.geometry.md)
- * [grid](api/hs/hs.grid.md)
- * [hash](api/hs/hs.hash.md)
- * [hints](api/hs/hs.hints.md)
- * [host](api/hs/hs.host.md)
- * [locale](api/hs/hs.host.locale.md)
- * [hotkey](api/hs/hs.hotkey.md)
- * [modal](api/hs/hs.hotkey.modal.md)
- * [http](api/hs/hs.http.md)
- * [httpserver](api/hs/hs.httpserver.md)
- * [hsminweb.cgilua.lp](api/hs/hs.httpserver.hsminweb.cgilua.lp.md)
- * [hsminweb.cgilua](api/hs/hs.httpserver.hsminweb.cgilua.md)
- * [hsminweb.cgilua.urlcode](api/hs/hs.httpserver.hsminweb.cgilua.urlcode.md)
- * [hsminweb](api/hs/hs.httpserver.hsminweb.md)
- * [image](api/hs/hs.image.md)
- * [inspect](api/hs/hs.inspect.md)
- * [ipc](api/hs/hs.ipc.md)
- * [itunes](api/hs/hs.itunes.md)
- * [javascript](api/hs/hs.javascript.md)
- * [json](api/hs/hs.json.md)
- * [keycodes](api/hs/hs.keycodes.md)
- * [layout](api/hs/hs.layout.md)
- * [location](api/hs/hs.location.md)
- * [geocoder](api/hs/hs.location.geocoder.md)
- * [logger](api/hs/hs.logger.md)
- * [menubar](api/hs/hs.menubar.md)
- * [messages](api/hs/hs.messages.md)
- * [midi](api/hs/hs.midi.md)
- * [milight](api/hs/hs.milight.md)
- * [mjomatic](api/hs/hs.mjomatic.md)
- * [mouse](api/hs/hs.mouse.md)
- * [network](api/hs/hs.network.md)
- * [configuration](api/hs/hs.network.configuration.md)
- * [host](api/hs/hs.network.host.md)
- * [ping](api/hs/hs.network.ping.md)
- * [echoRequest](api/hs/hs.network.ping.echoRequest.md)
- * [reachability](api/hs/hs.network.reachability.md)
- * [noises](api/hs/hs.noises.md)
- * [notify](api/hs/hs.notify.md)
- * [osascript](api/hs/hs.osascript.md)
- * [pasteboard](api/hs/hs.pasteboard.md)
- * [pathwatcher](api/hs/hs.pathwatcher.md)
- * [plist](api/hs/hs.plist.md)
- * [redshift](api/hs/hs.redshift.md)
- * [screen](api/hs/hs.screen.md)
- * [watcher](api/hs/hs.screen.watcher.md)
- * [settings](api/hs/hs.settings.md)
- * [sharing](api/hs/hs.sharing.md)
- * [socket](api/hs/hs.socket.md)
- * [udp](api/hs/hs.socket.udp.md)
- * [sound](api/hs/hs.sound.md)
- * [spaces.watcher](api/hs/hs.spaces.watcher.md)
- * [speech](api/hs/hs.speech.md)
- * [listener](api/hs/hs.speech.listener.md)
- * [spoons](api/hs/hs.spoons.md)
- * [spotify](api/hs/hs.spotify.md)
- * [spotlight](api/hs/hs.spotlight.md)
- * [group](api/hs/hs.spotlight.group.md)
- * [item](api/hs/hs.spotlight.item.md)
- * [sqlite3](api/hs/hs.sqlite3.md)
- * [streamdeck](api/hs/hs.streamdeck.md)
- * [styledtext](api/hs/hs.styledtext.md)
- * [tabs](api/hs/hs.tabs.md)
- * [task](api/hs/hs.task.md)
- * [timer](api/hs/hs.timer.md)
- * [delayed](api/hs/hs.timer.delayed.md)
- * [uielement](api/hs/hs.uielement.md)
- * [watcher](api/hs/hs.uielement.watcher.md)
- * [urlevent](api/hs/hs.urlevent.md)
- * [usb](api/hs/hs.usb.md)
- * [watcher](api/hs/hs.usb.watcher.md)
- * [utf8](api/hs/hs.utf8.md)
- * [vox](api/hs/hs.vox.md)
- * [watchable](api/hs/hs.watchable.md)
- * [webview](api/hs/hs.webview.md)
- * [datastore](api/hs/hs.webview.datastore.md)
- * [toolbar](api/hs/hs.webview.toolbar.md)
- * [usercontent](api/hs/hs.webview.usercontent.md)
- * [wifi](api/hs/hs.wifi.md)
- * [watcher](api/hs/hs.wifi.watcher.md)
- * [window](api/hs/hs.window.md)
- * [filter](api/hs/hs.window.filter.md)
- * [highlight](api/hs/hs.window.highlight.md)
- * [layout](api/hs/hs.window.layout.md)
- * [switcher](api/hs/hs.window.switcher.md)
- * [tiling](api/hs/hs.window.tiling.md)
\ No newline at end of file
+ * [alert](api/hs/hs.alert.md)
+ * [appfinder](api/hs/hs.appfinder.md)
+ * [applescript](api/hs/hs.applescript.md)
+ * [application](api/hs/hs.application.md)
+ * [watcher](api/hs/hs.application.watcher.md)
+ * [audiodevice](api/hs/hs.audiodevice.md)
+ * [datasource](api/hs/hs.audiodevice.datasource.md)
+ * [watcher](api/hs/hs.audiodevice.watcher.md)
+ * [axuielement](api/hs/hs.axuielement.md)
+ * [axtextmarker](api/hs/hs.axuielement.axtextmarker.md)
+ * [observer](api/hs/hs.axuielement.observer.md)
+ * [base64](api/hs/hs.base64.md)
+ * [battery](api/hs/hs.battery.md)
+ * [watcher](api/hs/hs.battery.watcher.md)
+ * [bonjour](api/hs/hs.bonjour.md)
+ * [service](api/hs/hs.bonjour.service.md)
+ * [brightness](api/hs/hs.brightness.md)
+ * [caffeinate](api/hs/hs.caffeinate.md)
+ * [watcher](api/hs/hs.caffeinate.watcher.md)
+ * [canvas](api/hs/hs.canvas.md)
+ * [matrix](api/hs/hs.canvas.matrix.md)
+ * [chooser](api/hs/hs.chooser.md)
+ * [console](api/hs/hs.console.md)
+ * [crash](api/hs/hs.crash.md)
+ * [deezer](api/hs/hs.deezer.md)
+ * [dialog](api/hs/hs.dialog.md)
+ * [color](api/hs/hs.dialog.color.md)
+ * [distributednotifications](api/hs/hs.distributednotifications.md)
+ * [doc](api/hs/hs.doc.md)
+ * [builder](api/hs/hs.doc.builder.md)
+ * [hsdocs](api/hs/hs.doc.hsdocs.md)
+ * [markdown](api/hs/hs.doc.markdown.md)
+ * [dockicon](api/hs/hs.dockicon.md)
+ * [drawing](api/hs/hs.drawing.md)
+ * [color](api/hs/hs.drawing.color.md)
+ * [eventtap](api/hs/hs.eventtap.md)
+ * [event](api/hs/hs.eventtap.event.md)
+ * [expose](api/hs/hs.expose.md)
+ * [fnutils](api/hs/hs.fnutils.md)
+ * [fs](api/hs/hs.fs.md)
+ * [volume](api/hs/hs.fs.volume.md)
+ * [xattr](api/hs/hs.fs.xattr.md)
+ * [geometry](api/hs/hs.geometry.md)
+ * [grid](api/hs/hs.grid.md)
+ * [hash](api/hs/hs.hash.md)
+ * [hid](api/hs/hs.hid.md)
+ * [led](api/hs/hs.hid.led.md)
+ * [hints](api/hs/hs.hints.md)
+ * [host](api/hs/hs.host.md)
+ * [locale](api/hs/hs.host.locale.md)
+ * [hotkey](api/hs/hs.hotkey.md)
+ * [modal](api/hs/hs.hotkey.modal.md)
+ * [http](api/hs/hs.http.md)
+ * [httpserver](api/hs/hs.httpserver.md)
+ * [hsminweb](api/hs/hs.httpserver.hsminweb.md)
+ * [cgilua](api/hs/hs.httpserver.hsminweb.cgilua.md)
+ * [lp](api/hs/hs.httpserver.hsminweb.cgilua.lp.md)
+ * [urlcode](api/hs/hs.httpserver.hsminweb.cgilua.urlcode.md)
+ * [image](api/hs/hs.image.md)
+ * [inspect](api/hs/hs.inspect.md)
+ * [ipc](api/hs/hs.ipc.md)
+ * [itunes](api/hs/hs.itunes.md)
+ * [javascript](api/hs/hs.javascript.md)
+ * [json](api/hs/hs.json.md)
+ * [keycodes](api/hs/hs.keycodes.md)
+ * [layout](api/hs/hs.layout.md)
+ * [location](api/hs/hs.location.md)
+ * [geocoder](api/hs/hs.location.geocoder.md)
+ * [logger](api/hs/hs.logger.md)
+ * [math](api/hs/hs.math.md)
+ * [menubar](api/hs/hs.menubar.md)
+ * [messages](api/hs/hs.messages.md)
+ * [midi](api/hs/hs.midi.md)
+ * [milight](api/hs/hs.milight.md)
+ * [mjomatic](api/hs/hs.mjomatic.md)
+ * [mouse](api/hs/hs.mouse.md)
+ * [network](api/hs/hs.network.md)
+ * [configuration](api/hs/hs.network.configuration.md)
+ * [host](api/hs/hs.network.host.md)
+ * [ping](api/hs/hs.network.ping.md)
+ * [echoRequest](api/hs/hs.network.ping.echoRequest.md)
+ * [reachability](api/hs/hs.network.reachability.md)
+ * [noises](api/hs/hs.noises.md)
+ * [notify](api/hs/hs.notify.md)
+ * [osascript](api/hs/hs.osascript.md)
+ * [pasteboard](api/hs/hs.pasteboard.md)
+ * [watcher](api/hs/hs.pasteboard.watcher.md)
+ * [pathwatcher](api/hs/hs.pathwatcher.md)
+ * [plist](api/hs/hs.plist.md)
+ * [redshift](api/hs/hs.redshift.md)
+ * [screen](api/hs/hs.screen.md)
+ * [watcher](api/hs/hs.screen.watcher.md)
+ * [serial](api/hs/hs.serial.md)
+ * [settings](api/hs/hs.settings.md)
+ * [sharing](api/hs/hs.sharing.md)
+ * [socket](api/hs/hs.socket.md)
+ * [udp](api/hs/hs.socket.udp.md)
+ * [sound](api/hs/hs.sound.md)
+ * [spaces](api/hs/hs.spaces.md)
+ * [watcher](api/hs/hs.spaces.watcher.md)
+ * [speech](api/hs/hs.speech.md)
+ * [listener](api/hs/hs.speech.listener.md)
+ * [spoons](api/hs/hs.spoons.md)
+ * [spotify](api/hs/hs.spotify.md)
+ * [spotlight](api/hs/hs.spotlight.md)
+ * [group](api/hs/hs.spotlight.group.md)
+ * [item](api/hs/hs.spotlight.item.md)
+ * [sqlite3](api/hs/hs.sqlite3.md)
+ * [streamdeck](api/hs/hs.streamdeck.md)
+ * [styledtext](api/hs/hs.styledtext.md)
+ * [tabs](api/hs/hs.tabs.md)
+ * [tangent](api/hs/hs.tangent.md)
+ * [task](api/hs/hs.task.md)
+ * [timer](api/hs/hs.timer.md)
+ * [delayed](api/hs/hs.timer.delayed.md)
+ * [uielement](api/hs/hs.uielement.md)
+ * [watcher](api/hs/hs.uielement.watcher.md)
+ * [urlevent](api/hs/hs.urlevent.md)
+ * [usb](api/hs/hs.usb.md)
+ * [watcher](api/hs/hs.usb.watcher.md)
+ * [utf8](api/hs/hs.utf8.md)
+ * [vox](api/hs/hs.vox.md)
+ * [watchable](api/hs/hs.watchable.md)
+ * [websocket](api/hs/hs.websocket.md)
+ * [webview](api/hs/hs.webview.md)
+ * [datastore](api/hs/hs.webview.datastore.md)
+ * [toolbar](api/hs/hs.webview.toolbar.md)
+ * [usercontent](api/hs/hs.webview.usercontent.md)
+ * [wifi](api/hs/hs.wifi.md)
+ * [watcher](api/hs/hs.wifi.watcher.md)
+ * [window](api/hs/hs.window.md)
+ * [filter](api/hs/hs.window.filter.md)
+ * [highlight](api/hs/hs.window.highlight.md)
+ * [layout](api/hs/hs.window.layout.md)
+ * [switcher](api/hs/hs.window.switcher.md)
+ * [tiling](api/hs/hs.window.tiling.md)
diff --git a/api/plugins/plugins.core.quit.md b/api/cp/cp.18n.md
similarity index 52%
rename from api/plugins/plugins.core.quit.md
rename to api/cp/cp.18n.md
index d3cc3e6..db55640 100644
--- a/api/plugins/plugins.core.quit.md
+++ b/api/cp/cp.18n.md
@@ -1,21 +1,21 @@
-# [docs](index.md) » plugins.core.quit
+# [docs](index.md) » cp.18n
---
-Core CommandPost functionality
+CommandPost's Internationalisation & Localisation Manger.
## API Overview
* Functions - API calls offered directly by the extension
- * [quit](#quit)
+ * [init](#init)
## API Documentation
### Functions
-#### [quit](#quit)
-| **Signature** | `plugins.core.quit.quit() -> nil` |
+#### [init](#init)
+| **Signature** | `cp.18n.init() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Quit's CommandPost |
+| **Type** | Function |
+| **Description** | Initialise the module. |
| **Parameters** |
|
-| **Returns** | |
+| **Returns** | |
diff --git a/api/cp/cp.adobe.aftereffects.app.md b/api/cp/cp.adobe.aftereffects.app.md
new file mode 100644
index 0000000..d3c6d19
--- /dev/null
+++ b/api/cp/cp.adobe.aftereffects.app.md
@@ -0,0 +1,19 @@
+# [docs](index.md) » cp.adobe.aftereffects.app
+---
+
+The `cp.app` for Adobe After Effects.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [app](#app)
+
+## API Documentation
+
+### Constants
+
+#### [app](#app)
+| **Signature** | `cp.adobe.aftereffects.app ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The `cp.app` for After Effects. |
+
diff --git a/api/cp/cp.adobe.aftereffects.md b/api/cp/cp.adobe.aftereffects.md
new file mode 100644
index 0000000..e8cb734
--- /dev/null
+++ b/api/cp/cp.adobe.aftereffects.md
@@ -0,0 +1,80 @@
+# [docs](index.md) » cp.adobe.aftereffects
+---
+
+Adobe After Effects Extension
+
+## Submodules
+ * [cp.adobe.aftereffects.app](cp.adobe.aftereffects.app.md)
+ * [cp.adobe.aftereffects.shortcuts](cp.adobe.aftereffects.shortcuts.md)
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [preferences](#preferences)
+* Functions - API calls offered directly by the extension
+ * [allowScriptsToWriteFilesAndAccessNetwork](#allowscriptstowritefilesandaccessnetwork)
+ * [preferencesFilePath](#preferencesfilepath)
+ * [preferencesPath](#preferencespath)
+ * [refreshPreferences](#refreshpreferences)
+ * [shortcutsPreferences](#shortcutspreferences)
+ * [shortcutsPreferencesPath](#shortcutspreferencespath)
+
+## API Documentation
+
+### Constants
+
+#### [preferences](#preferences)
+| **Signature** | `cp.adobe.aftereffects.preferences ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The `cp.app.prefs` for After Effects. |
+
+### Functions
+
+#### [allowScriptsToWriteFilesAndAccessNetwork](#allowscriptstowritefilesandaccessnetwork)
+| **Signature** | `cp.adobe.aftereffects:allowScriptsToWriteFilesAndAccessNetwork() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Is "Allow Scripts to Write Files and Access Network" enabled in After Effects Preferences? |
+| **Parameters** | |
+| **Returns** | |
+
+#### [preferencesFilePath](#preferencesfilepath)
+| **Signature** | `cp.adobe.aftereffects:preferencesFilePath() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | The path to the main Preferences file. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [preferencesPath](#preferencespath)
+| **Signature** | `cp.adobe.aftereffects:preferencesPath() -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | The path to After Effects Preferences folder. |
+| **Parameters** | |
+| **Returns** | - A string or
nil if no path can be found.
|
+
+#### [refreshPreferences](#refreshpreferences)
+| **Signature** | `cp.adobe.aftereffects:refreshPreferences() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | If After Effects is running, this forces the preferences file to be saved to disk. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [shortcutsPreferences](#shortcutspreferences)
+| **Signature** | `cp.adobe.aftereffects:shortcutsPreferences() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets a table of all the active After Effects keyboard shortcuts. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [shortcutsPreferencesPath](#shortcutspreferencespath)
+| **Signature** | `cp.adobe.aftereffects:shortcutsPreferencesPath() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the active shortcut key preferences file path. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.adobe.aftereffects.shortcuts.md b/api/cp/cp.adobe.aftereffects.shortcuts.md
new file mode 100644
index 0000000..c360f28
--- /dev/null
+++ b/api/cp/cp.adobe.aftereffects.shortcuts.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.adobe.aftereffects.shortcuts
+---
+
+Translations between After Effects shortcuts and Hammerspoon-friendly shortcuts.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [keys](#keys)
+ * [labels](#labels)
+ * [modifiers](#modifiers)
+
+## API Documentation
+
+### Constants
+
+#### [keys](#keys)
+| **Signature** | `cp.adobe.aftereffects.shortcuts.keys -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Table containing key translations. |
+
+#### [labels](#labels)
+| **Signature** | `cp.adobe.aftereffects.shortcuts.labels -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Table containing label translations. |
+
+#### [modifiers](#modifiers)
+| **Signature** | `cp.adobe.aftereffects.shortcuts.modifiers -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Table containing modifier translations. |
+
diff --git a/api/cp/cp.app.md b/api/cp/cp.app.md
new file mode 100644
index 0000000..4fde18d
--- /dev/null
+++ b/api/cp/cp.app.md
@@ -0,0 +1,420 @@
+# [docs](index.md) » cp.app
+---
+
+This class assists with working with macOS apps. It provides functions for
+finding, checking the running status, version number, path, and many other
+values related to an application. It also provides support for launching,
+quitting, and other activities related to applications.
+
+This extension differs from the `hs.application` extension in several ways:
+ * `cp.app` instances are long-lived. You request it once and it will stay up-to-date even if the app quits.
+ * It makes extensive use of `cp.prop`, so you can `watch` many most properties of the app and get live notifications when they change.
+
+## Submodules
+ * [cp.app.menu](cp.app.menu.md)
+ * [cp.app.prefs](cp.app.prefs.md)
+
+## API Overview
+* Variables - Configurable values
+ * [frontmostApp](#frontmostapp)
+* Functions - API calls offered directly by the extension
+ * [apps](#apps)
+ * [bundleIDs](#bundleids)
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [forBundleID](#forbundleid)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [baseLocale](#baselocale)
+ * [baseResourcesPath](#baseresourcespath)
+ * [currentLocale](#currentlocale)
+ * [description](#description)
+ * [displayName](#displayname)
+ * [focusedWindow](#focusedwindow)
+ * [focusedWindowUI](#focusedwindowui)
+ * [frontmost](#frontmost)
+ * [hsApplication](#hsapplication)
+ * [info](#info)
+ * [installed](#installed)
+ * [localeResourcesPath](#localeresourcespath)
+ * [mainWindowUI](#mainwindowui)
+ * [modalDialogOpen](#modaldialogopen)
+ * [path](#path)
+ * [pid](#pid)
+ * [preferences](#preferences)
+ * [resourcesPath](#resourcespath)
+ * [running](#running)
+ * [showing](#showing)
+ * [supportedLocales](#supportedlocales)
+ * [UI](#ui)
+ * [version](#version)
+ * [versionString](#versionstring)
+ * [windows](#windows)
+ * [windowsUI](#windowsui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [bestSupportedLocale](#bestsupportedlocale)
+ * [bundleID](#bundleid)
+ * [doHide](#dohide)
+ * [doLaunch](#dolaunch)
+ * [doQuit](#doquit)
+ * [doRestart](#dorestart)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [isSupportedLocale](#issupportedlocale)
+ * [keyStroke](#keystroke)
+ * [launch](#launch)
+ * [notifier](#notifier)
+ * [quit](#quit)
+ * [registerWindowType](#registerwindowtype)
+ * [searchResources](#searchresources)
+ * [show](#show)
+ * [update](#update)
+
+## API Documentation
+
+### Variables
+
+#### [frontmostApp](#frontmostapp)
+| **Signature** | `cp.app.frontmostApp ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Returns the most recent 'registered' app that was active, other than CommandPost itself. |
+
+### Functions
+
+#### [apps](#apps)
+| **Signature** | `cp.app.apps() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a list of all apps that have been requested via [forBundleID](#forBundleID), in no particular order. |
+| **Parameters** | |
+| **Returns** | - A list of
cp.app instances.
|
+
+#### [bundleIDs](#bundleids)
+| **Signature** | `cp.app.bundleIDs() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a list of Bundle IDs which have been requested via [forBundleID](#forBundleID). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [is](#is)
+| **Signature** | `cp.app.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `thing` is a `cp.app` instance. |
+| **Parameters** | - thing - The thing to check.
|
+| **Returns** | true if it is a cp.app instance, otherwise false.
|
+
+### Constructors
+
+#### [forBundleID](#forbundleid)
+| **Signature** | `cp.app.forBundleID(bundleID)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Returns the `cp.app` for the specified Bundle ID. If the app has already been created, |
+| **Parameters** | - bundleID - The application bundle ID to find the app for.
|
+| **Returns** | - The
cp.app for the bundle.
|
+
+### Fields
+
+#### [baseLocale](#baselocale)
+| **Signature** | `cp.app.baseLocale ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the [localeID](cp.i18n.localeID.md) of the development region. This is the 'Base' locale for I18N. |
+
+#### [baseResourcesPath](#baseresourcespath)
+| **Signature** | `cp.app.baseResourcesPath ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [prop](cp.prop.md) for the file path to the `Content/Resources/Base.lproj` folder |
+
+#### [currentLocale](#currentlocale)
+| **Signature** | `cp.app.currentLocale ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets and sets the current locale for the application. |
+
+#### [description](#description)
+| **Signature** | `cp.app.description -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the short description of the class as "cp.app: " |
+
+#### [displayName](#displayname)
+| **Signature** | `cp.app.displayName ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The application display name as a string. |
+
+#### [focusedWindow](#focusedwindow)
+| **Signature** | `cp.app.focusedWindow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The currently-focused [Window](cp.ui.Window.md). This may be a subclass of `Window` if |
+
+#### [focusedWindowUI](#focusedwindowui)
+| **Signature** | `cp.app.focusedWindowUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the UI containing the currently-focused window for the app. |
+
+#### [frontmost](#frontmost)
+| **Signature** | `cp.app.frontmost ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the application currently frontmost? |
+
+#### [hsApplication](#hsapplication)
+| **Signature** | `cp.app.hsApplication ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the running `hs.application` for the application, or `nil` if it's not running. |
+
+#### [info](#info)
+| **Signature** | `cp.app.info ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The info table for the application, if available. |
+
+#### [installed](#installed)
+| **Signature** | `cp.app.installed ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the application currently installed. |
+
+#### [localeResourcesPath](#localeresourcespath)
+| **Signature** | `cp.app.localeResourcesPath ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [prop](cp.prop.md) for the file path to the locale-specific resources |
+
+#### [mainWindowUI](#mainwindowui)
+| **Signature** | `cp.app.mainWindowUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the UI containing the currently-focused window for the app. |
+
+#### [modalDialogOpen](#modaldialogopen)
+| **Signature** | `cp.app.modalDialogOpen ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if a modal dialog window is currently opon. |
+
+#### [path](#path)
+| **Signature** | `cp.app.path ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Path to the application, or `nil` if not found. |
+
+#### [pid](#pid)
+| **Signature** | `cp.app.pid ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the PID for the currently-running application, or `nil` if it's not running. |
+
+#### [preferences](#preferences)
+| **Signature** | `cp.app.preferences ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current [preferences](cp.app.prefs.md) for the application. |
+
+#### [resourcesPath](#resourcespath)
+| **Signature** | `cp.app.resourcesPath ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [prop](cp.prop.md) for the file path to the `Contents/Resources` folder inside the app. |
+
+#### [running](#running)
+| **Signature** | `cp.app.running ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the application currently is running. |
+
+#### [showing](#showing)
+| **Signature** | `cp.app.showing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the app visible on screen? |
+
+#### [supportedLocales](#supportedlocales)
+| **Signature** | `cp.app.supportedLocales ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a list of `cp.i18n.localeID` values for locales that are supported by this app. |
+
+#### [UI](#ui)
+| **Signature** | `cp.app.UI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the application's `axuielement`, if available. |
+
+#### [version](#version)
+| **Signature** | `cp.app.version ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The application version as a [semver](https://github.com/kikito/semver.lua). |
+| **Notes** | - If the application is running it will get the version of the active application as a string, otherwise, it will use
hs.application.infoForBundleID() to find the version.
|
+
+#### [versionString](#versionstring)
+| **Signature** | `cp.app.versionString ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The application version as a `string`. |
+| **Notes** | - If the application is running it will get the version of the active application as a string, otherwise, it will use
hs.application.infoForBundleID() to find the version.
|
+
+#### [windows](#windows)
+| **Signature** | `cp.app.windows ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a list containing the [Window](cp.ui.Window.md) instances currently available. |
+
+#### [windowsUI](#windowsui)
+| **Signature** | `cp.app.windowsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the UI containing the list of windows in the app. |
+
+### Methods
+
+#### [bestSupportedLocale](#bestsupportedlocale)
+| **Signature** | `cp.app:bestSupportedLocale(locale) -> cp.i18n.localeID or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the closest match for the specified locale. The returned locale |
+| **Parameters** | - locale - The local to match
|
+| **Returns** | - The closest supported locale or
nil if none are available in the language.
|
+
+#### [bundleID](#bundleid)
+| **Signature** | `cp.app:bundleID() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the Bundle ID for the app. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.app:doHide() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` which will hide the app if it's currently running. |
+| **Parameters** | |
+| **Returns** | - A
Statement, resolving to true if the app is running and was successfully hidden, or false otherwise.
|
+
+#### [doLaunch](#dolaunch)
+| **Signature** | `cp.app:doLaunch([waitSeconds[, path]]) -> cp.rx.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that can be run to launch or focus the current app. |
+| **Parameters** | - waitSeconds - (optional) The number of seconds to wait for it to load. Defaults to 30 seconds.
- path - (optional) The alternate path of the app to launch.
|
+| **Returns** | - The
Statement, resolving to true after the app is frontmost.
|
+| **Notes** | - By default the
Statement will time out after 30 seconds, sending an error signal.
|
+
+#### [doQuit](#doquit)
+| **Signature** | `cp.app:doQuit() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will attempt to quit the app when executed. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if the app was running and was quit successfully, otherwise false.
|
+| **Notes** | - The Statement will time out after 60 seconds by default. This can be changed by calling the
TimeoutAfter method on the Statement before executing.
|
+
+#### [doRestart](#dorestart)
+| **Signature** | `cp.app:doRestart() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` which will attempt to restart the app. If the app |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if the app was running and was quit and restarted successfully, otherwise false.
|
+| **Notes** | - The Statement will time out after 60 seconds by default. This can be changed by calling the
TimeoutAfter method on the Statement before executing.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.app:doShow() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` which will show the app if it's currently running. |
+| **Parameters** | |
+| **Returns** | - A
Statement, resolving to true if the app is running and was successfully shown, or false otherwise.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.app:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the application, if it's currently running. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [isSupportedLocale](#issupportedlocale)
+| **Signature** | `cp.app:isSupportedLocale(locale) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the specified locale is supported. The `locale` can |
+| **Parameters** | - locale - The locale code string or
localeID to check.
|
+| **Returns** | true if it is supported, otherwise false.
|
+
+#### [keyStroke](#keystroke)
+| **Signature** | `cp.app:keyStroke(modifiers, character) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Generates and emits a single keystroke event pair for the supplied keyboard |
+| **Parameters** | - modifiers - A table containing the keyboard modifiers to apply ("fn", "ctrl", "alt", "cmd" or "shift")
- character - A string containing a character to be emitted
|
+| **Returns** | |
+
+#### [launch](#launch)
+| **Signature** | `cp.app:launch([waitSeconds], [path]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Launches the application, or brings it to the front if it was already running. |
+| **Parameters** | waitSeconds - If provided, the number of seconds to wait until the launch completes. If nil, it will return immediately.path - An optional full path to an application without an extension (i.e /Applications/Final Cut Pro 10.3.4). This allows you to load previous versions of the application.
|
+| **Returns** | |
+
+#### [notifier](#notifier)
+| **Signature** | `cp.app:notifier() -> cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `notifier` that is tracking the application UI element. It has already been started. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [quit](#quit)
+| **Signature** | `cp.app:quit(waitSeconds) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Asks the application to quit, if it's running. The app may not have actually quit after this |
+| **Parameters** | waitSeconds - If povided, the number of seconds to wait until the quit completes. If nil, it will return immediately.
|
+| **Returns** | |
+
+#### [registerWindowType](#registerwindowtype)
+| **Signature** | `cp.app:registerWindowType(windowClass[, options]) -> cp.app` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Registers the specified class as one which will be used when accessing a specific `AXWindow` instance. |
+| **Parameters** | - windowClass - The class that will be used to create the window. It should be a subclass of Window
- options - (optional) if provided, it will be passed the
hs.asm.axuielement being wrapped, and should return true or false.
|
+| **Returns** | - the same instance of the
cp.app for further configuration.
|
+| **Notes** | - Options:
matches: a function that will receive the AXWindow instance and should return true or false.persistent: if set to true, the Window instance will be cached and checked when windows appear and disappear.
|
+
+#### [searchResources](#searchresources)
+| **Signature** | `cp.app:searchResources(value) -> hs.task` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a `hs.task` which will search for the specified string value in the resources |
+| **Parameters** | - value - The string value to search for.
|
+| **Returns** | hs.task which is already running, searching for the value. Results will be output in the Error Log.
|
+| **Notes** | - This may take some time to complete, depending on how many resources the app contains.
|
+
+#### [show](#show)
+| **Signature** | `cp.app:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Ensure the app is onscreen if it is currently running. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [update](#update)
+| **Signature** | `cp.app:update() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Updates the app, triggering any watchers if values have changed. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.app.menu.md b/api/cp/cp.app.menu.md
new file mode 100644
index 0000000..017fe68
--- /dev/null
+++ b/api/cp/cp.app.menu.md
@@ -0,0 +1,174 @@
+# [docs](index.md) » cp.app.menu
+---
+
+Represents an app's menu bar, providing multi-lingual access to find and
+trigger menu items.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [NIB_FILE](#nib_file)
+ * [ROLE](#role)
+ * [STORYBOARD_NAME](#storyboard_name)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [menu](#menu)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [showing](#showing)
+ * [UI](#ui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [addMenuFinder](#addmenufinder)
+ * [app](#app)
+ * [doFindMenuUI](#dofindmenuui)
+ * [doIsEnabled](#doisenabled)
+ * [doSelectMenu](#doselectmenu)
+ * [findMenuUI](#findmenuui)
+ * [getMenuTitles](#getmenutitles)
+ * [isChecked](#ischecked)
+ * [isEnabled](#isenabled)
+ * [selectMenu](#selectmenu)
+ * [visitMenuItems](#visitmenuitems)
+
+## API Documentation
+
+### Constants
+
+#### [NIB_FILE](#nib_file)
+| **Signature** | `cp.app.menu.NIB_FILE -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Main NIB File. |
+
+#### [ROLE](#role)
+| **Signature** | `cp.app.menu.ROLE -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The menu role |
+
+#### [STORYBOARD_NAME](#storyboard_name)
+| **Signature** | `cp.app.menu.STORYBOARD_NAME -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Main Storyboard name. |
+
+### Constructors
+
+#### [menu](#menu)
+| **Signature** | `cp.app.menu(app) -> menu` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs a new menu for the specified App. |
+| **Parameters** | - app - The
cp.app instance the menu belongs to.
|
+| **Returns** | |
+
+### Fields
+
+#### [showing](#showing)
+| **Signature** | `cp.app.menu.showing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Tells you if the app's Menu Bar is visible. |
+
+#### [UI](#ui)
+| **Signature** | `cp.app.menu.UI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` representing the menu. |
+
+### Methods
+
+#### [addMenuFinder](#addmenufinder)
+| **Signature** | `cp.app.menu:addMenuFinder(finder) -> nothing` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Registers an `AXMenuItem` finder function. The finder's job is to take an individual 'find' |
+| **Parameters** | finder - The finder function
|
+| **Returns** | - The
AXMenuItem found, or nil.
|
+| **Notes** | - The
finder should have the following signature: function(parentItem, path, childName, locale) -> childItem- The elements are:
- parentItem - The
AXMenuItem containing the children. E.g. the Go To menu under Window. - path - An array of strings in the specified locale leading to the parent item. E.g.
{"Window", "Go To"}. - childName - The name of the next child to find, in the specified locale. E.g.
"Libraries". - locale - The
cp.i18n.localeID that the menu titles are in. - childItem - The
AXMenuItem that was found, or nil if not found.
|
+
+#### [app](#app)
+| **Signature** | `cp.app.menu:app() -> cp.app` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `cp.app` instance this belongs to. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doFindMenuUI](#dofindmenuui)
+| **Signature** | `cp.app.menu:doFindMenuUI(path[, options]) -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that when executed will emit each of the menu items along the path. |
+| **Parameters** | - path - the table of path items.
- options - (optional) table of additional configuration options.
|
+| **Returns** | - The
Statement, ready to be executed.
|
+| **Notes** | - Each step on the path can be either one of:
- a string - The exact name of the menu item.
- a number - The menu item number, starting from 1.
- a function - Passed one argument - the Menu UI to check - returning
true if it matches. - The
options may contain: - locale - The locale that any strings in the path are in. Defaults to "en".
- plain - Whether or not to disable the pattern matching feature. Defaults to
false. - Examples:
myApp:menu():doFindMenuUI({"Edit", "Copy"}):Now(function(item) print(item:title() .. " enabled: ", item:enabled()) end, error)
|
+
+#### [doIsEnabled](#doisenabled)
+| **Signature** | `cp.app.menu:doIsEnabled(path, options) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that returns `true` if the item at the end of the path is enabled. |
+| **Parameters** | - path - The menu path to check.
- options - The options.
|
+| **Returns** | |
+
+#### [doSelectMenu](#doselectmenu)
+| **Signature** | `cp.app.menu:doSelectMenu(path, options) -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects a Menu Item based on the provided menu path. |
+| **Parameters** | - path - The list of menu items you'd like to activate.
- options - (optional) The table of options to apply.
|
+| **Returns** | - The
Statement, ready to execute.
|
+| **Notes** | - Each step on the path can be either one of:
- a string - The exact name of the menu item.
- a number - The menu item number, starting from 1.
- a function - Passed one argument - the Menu UI to check - returning
true if it matches. - The
options may include: - locale - The
localeID or string for the locale that the path values are in. - pressAll - If
true, all menu items will be pressed on the way to the final destination. - plain - Whether or not to disable the pattern matching feature. Defaults to
false. - Examples:
previewApp:menu():doSelectMenu({"File", "Take Screenshot", "From Entire Screen"}):Now()
|
+
+#### [findMenuUI](#findmenuui)
+| **Signature** | `cp.app.menu:findMenuUI(path[, options]) -> Menu UI, table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds a specific Menu UI element for the provided path. |
+| **Parameters** | - path - The path list to search for.
- options - (Optional) The table of options.
|
+| **Returns** | - The Menu UI, or
nil if it could not be found. - The full list of Menu UIs for the path in a table.
|
+| **Notes** | - Each step on the path can be either one of:
- a string - The exact name of the menu item.
- a number - The menu item number, starting from 1.
- a function - Passed one argument - the Menu UI to check - returning
true if it matches. - The
options can contain: - locale - The
localeID or string with the locale code. Defaults to "en". - plain - Whether or not to disable the pattern matching feature. Defaults to
false.
|
+
+#### [getMenuTitles](#getmenutitles)
+| **Signature** | `cp.app.menu:getMenuTitles([locales]) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table with the available menus, items and sub-menu, in the specified locales (if available). |
+| **Parameters** | - locales - An optional single
localeID or a list of localeIDs to ensure are loaded.
|
+| **Returns** | - A table of Menu Bar Values
|
+| **Notes** | - This menu may get added to over time if additional locales are loaded - previously loaded locales are not removed from the cache.
|
+
+#### [isChecked](#ischecked)
+| **Signature** | `cp.app.menu:isChecked(path[, options]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Is a menu item checked? |
+| **Parameters** | - path - At table containing the path to the menu bar item.
- options - The locale the path is in. Defaults to "en".
|
+| **Returns** | true if checked otherwise false.
|
+| **Notes** | - The
options may include: - locale - The
localeID or string with the locale code. Defaults to "en".
|
+
+#### [isEnabled](#isenabled)
+| **Signature** | `cp.app.menu:isEnabled(path[, options]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Is a menu item enabled? |
+| **Parameters** | - path - At table containing the path to the menu bar item.
- options - The optional table of options.
|
+| **Returns** | true if enabled otherwise false.
|
+| **Notes** | - The
options may include: - locale - The
localeID or string with the locale code. Defaults to "en".
|
+
+#### [selectMenu](#selectmenu)
+| **Signature** | `cp.app.menu:selectMenu(path[, options]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects a Menu Item based on the list of menu titles in English. |
+| **Parameters** | - path - The list of menu items you'd like to activate.
- options - (optional) The table of options to apply.
|
+| **Returns** | true if the press was successful.
|
+| **Notes** | - Each step on the path can be either one of:
- a string - The exact name of the menu item.
- a number - The menu item number, starting from 1.
- a function - Passed one argument - the Menu UI to check - returning
true if it matches. - The
options may include: - locale - The
localeID or string for the locale that the path values are in. - pressAll - If
true, all menu items will be pressed on the way to the final destination. - plain - Whether or not to disable the pattern matching feature. Defaults to
false. - Example usage:
require("cp.app").forBundleID("com.apple.FinalCut"):menu():selectMenu({"View", "Browser", "Toggle Filmstrip/List View"})
|
+
+#### [visitMenuItems](#visitmenuitems)
+| **Signature** | `cp.app.menu:visitMenuItems(visitFn[, options]]) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Walks the menu tree, calling the `visitFn` on all the 'item' values - that is, |
+| **Parameters** | - visitFn - The function called for each menu item.
- options - (optional) The table of options.
|
+| **Returns** | |
+| **Notes** | - The
options may include: - locale - The
localeID or string with the locale code. Defaults to "en". - startPath - The path to the menu item to start at.
- The
visitFn will be called on each menu item with the following parameters: function(path, menuItem)- The
menuItem is the AXMenuItem object, and the path is an array with the path to that menu item. For example, if it is the "Copy" item in the "Edit" menu, the path will be { "Edit" }.
|
+
diff --git a/api/cp/cp.app.prefs.md b/api/cp/cp.app.prefs.md
new file mode 100644
index 0000000..e77c140
--- /dev/null
+++ b/api/cp/cp.app.prefs.md
@@ -0,0 +1,83 @@
+# [docs](index.md) » cp.app.prefs
+---
+
+Provides access to application preferences, typically stored via `NSUserDefaults` or `CFProperties`.
+To access the preferences, simply pass in the Bundle ID (eg. "com.apple.Preview") and it will return
+a table whose keys can be accessed or updated, or iterated via `ipairs`.
+
+For example:
+
+```lua
+local previewPrefs = require("cp.app.prefs") "com.apple.Preview"
+previewPrefs.MyCustomPreference = "Hello world"
+print(previewPrefs.MyCustomPreference) --> "Hello world"
+
+for k,v in pairs(previewPrefs) do
+ print(k .. " = " .. tostring(v))
+end
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [bundleID](#bundleid)
+ * [get](#get)
+ * [is](#is)
+ * [prop](#prop)
+ * [set](#set)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [prefs](#prefs)
+
+## API Documentation
+
+### Functions
+
+#### [bundleID](#bundleid)
+| **Signature** | `cp.app.prefs.bundleID(prefs) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Retrieves the `bundleID` associated with the `cp.app.prefs` instance. |
+| **Parameters** | - prefs - the
prefs object to query
|
+| **Returns** | - The Bundle ID string, or
nil if it's not a cp.app.prefs.
|
+
+#### [get](#get)
+| **Signature** | `cp.app.prefs.get(prefs, key[, defaultValue]) -> value` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Retrieves the specifed `key` from the provided `prefs`. |
+| **Parameters** | - prefs - The
prefs instance. - key - The key to retrieve.
- defaultValue - The value to return if none is currently set.
|
+| **Returns** | - The current value, or
defaultValue if not set.
|
+
+#### [is](#is)
+| **Signature** | `cp.app.prefs.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `cp.app.prefs` instance. |
+| **Parameters** | - thing - The value to check
|
+| **Returns** | true if if's a prefs, otherwise false.
|
+
+#### [prop](#prop)
+| **Signature** | `cp.app.prefs.prop(prefs, key[, defaultValue]) -> cp.prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Retrieves the `cp.prop` for the specified key. It can be `watched` for changes. |
+| **Parameters** | - prefs - The
prefs instance. - key - The key to get/set.
- defaultValue - The value if no default values is currently set.
- deepTable - Should the prop use deep table (defaults to
true).
|
+| **Returns** | |
+
+#### [set](#set)
+| **Signature** | `cp.app.prefs.set(prefs, key, value) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Sets the key/value for the specified `prefs` instance. |
+| **Parameters** | - prefs - The
prefs instance. - key - The key to set.
- value - the new value.
|
+| **Returns** | |
+
+### Constructors
+
+#### [prefs](#prefs)
+| **Signature** | `cp.app.prefs(bundleID) -> cp.app.prefs` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `cp.app.prefs` instance, pointing at the specified `bundleID`. |
+| **Parameters** | - bundleID The Bundle ID to access preferences for.
|
+| **Returns** | - A new
cp.app.prefs with read/write access to the application's preferences.
|
+
diff --git a/api/cp/cp.apple.commandeditor.md b/api/cp/cp.apple.commandeditor.md
new file mode 100644
index 0000000..eb63827
--- /dev/null
+++ b/api/cp/cp.apple.commandeditor.md
@@ -0,0 +1,78 @@
+# [docs](index.md) » cp.apple.commandeditor
+---
+
+Functions to control and manage Apple's Command Editor - used in Final Cut Pro,
+Motion and Compressor.
+
+## API Overview
+* Variables - Configurable values
+ * [padKeys](#padkeys)
+* Functions - API calls offered directly by the extension
+ * [characterStringToKeyCode](#characterstringtokeycode)
+ * [keypadCharacterToKeyCode](#keypadcharactertokeycode)
+ * [modifierMaskToModifiers](#modifiermasktomodifiers)
+ * [modifierMatch](#modifiermatch)
+ * [shortcutsFromCommandSet](#shortcutsfromcommandset)
+ * [translateModifiers](#translatemodifiers)
+
+## API Documentation
+
+### Variables
+
+#### [padKeys](#padkeys)
+| **Signature** | `cp.apple.commandeditor.padKeys -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Table of Pad Keys |
+
+### Functions
+
+#### [characterStringToKeyCode](#characterstringtokeycode)
+| **Signature** | `cp.apple.commandeditor.characterStringToKeyCode() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Translate Keyboard Character Strings from Command Set Format into Hammerspoon Format. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [keypadCharacterToKeyCode](#keypadcharactertokeycode)
+| **Signature** | `cp.apple.commandeditor.keypadCharacterToKeyCode() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Translate Keyboard Keypad Character Strings from Command Set Format into Hammerspoon Format. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [modifierMaskToModifiers](#modifiermasktomodifiers)
+| **Signature** | `cp.apple.commandeditor.modifierMaskToModifiers() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Translate Keyboard Modifiers from Apple's Property List Format into Hammerspoon Format. |
+| **Parameters** | |
+| **Returns** | - A table of modifier strings.
|
+
+#### [modifierMatch](#modifiermatch)
+| **Signature** | `cp.apple.commandeditor.modifierMatch(inputA, inputB) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Compares two modifier tables. |
+| **Parameters** | - inputA - table of modifiers
- inputB - table of modifiers
|
+| **Returns** | true if there's a match otherwise false
|
+| **Notes** | - This function only takes into account 'ctrl', 'alt', 'cmd', 'shift'.
|
+
+#### [shortcutsFromCommandSet](#shortcutsfromcommandset)
+| **Signature** | `cp.apple.commandeditor.shortcutsFromCommandSet(id, commandSet) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets a specific command from a specified Command Set and returns a table of Shortcuts. |
+| **Parameters** | - id - The ID of the command you want to get.
- commandSet - A table containing an entire Command Set.
|
+| **Returns** | - A table of shortcuts for a specific command.
|
+
+#### [translateModifiers](#translatemodifiers)
+| **Signature** | `cp.apple.commandeditor.translateModifiers() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Translate Keyboard Modifiers from Command Set Format into Hammerspoon Format. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.compressor.app.md b/api/cp/cp.apple.compressor.app.md
new file mode 100644
index 0000000..f55b702
--- /dev/null
+++ b/api/cp/cp.apple.compressor.app.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.apple.compressor.app
+---
+
+The `cp.app` for Apple's Compressor.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.apple.compressor.md b/api/cp/cp.apple.compressor.md
index e869133..03a63c2 100644
--- a/api/cp/cp.apple.compressor.md
+++ b/api/cp/cp.apple.compressor.md
@@ -3,6 +3,9 @@
Represents the Compressor application, providing functions that allow different tasks to be accomplished.
+## Submodules
+ * [cp.apple.compressor.app](cp.apple.compressor.app.md)
+
## API Overview
* Constants - Useful values which cannot be changed
* [ALLOWED_IMPORT_ALL_EXTENSIONS](#allowed_import_all_extensions)
@@ -10,20 +13,15 @@ Represents the Compressor application, providing functions that allow different
* [ALLOWED_IMPORT_IMAGE_EXTENSIONS](#allowed_import_image_extensions)
* [ALLOWED_IMPORT_VIDEO_EXTENSIONS](#allowed_import_video_extensions)
* [BUNDLE_ID](#bundle_id)
-* Fields - Variables which can only be accessed from an object returned by a constructor
- * [isFrontmost](#isfrontmost)
- * [isInstalled](#isinstalled)
- * [isRunning](#isrunning)
- * [isShowing](#isshowing)
+ * [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
* Methods - API calls which can only be made on an object returned by a constructor
- * [application](#application)
- * [getBundleID](#getbundleid)
- * [getVersion](#getversion)
+ * [bundleID](#bundleid)
+ * [doRestart](#dorestart)
* [hide](#hide)
* [launch](#launch)
+ * [notifier](#notifier)
* [path](#path)
* [quit](#quit)
- * [restart](#restart)
* [show](#show)
## API Documentation
@@ -33,131 +31,102 @@ Represents the Compressor application, providing functions that allow different
#### [ALLOWED_IMPORT_ALL_EXTENSIONS](#allowed_import_all_extensions)
| **Signature** | `cp.apple.compressor.ALLOWED_IMPORT_ALL_EXTENSIONS` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of all file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of all file extensions Final Cut Pro can import. |
#### [ALLOWED_IMPORT_AUDIO_EXTENSIONS](#allowed_import_audio_extensions)
| **Signature** | `cp.apple.compressor.ALLOWED_IMPORT_AUDIO_EXTENSIONS` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of audio file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of audio file extensions Final Cut Pro can import. |
#### [ALLOWED_IMPORT_IMAGE_EXTENSIONS](#allowed_import_image_extensions)
| **Signature** | `cp.apple.compressor.ALLOWED_IMPORT_IMAGE_EXTENSIONS` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of image file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of image file extensions Final Cut Pro can import. |
#### [ALLOWED_IMPORT_VIDEO_EXTENSIONS](#allowed_import_video_extensions)
| **Signature** | `cp.apple.compressor.ALLOWED_IMPORT_VIDEO_EXTENSIONS` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of video file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of video file extensions Final Cut Pro can import. |
#### [BUNDLE_ID](#bundle_id)
| **Signature** | `cp.apple.compressor.BUNDLE_ID` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Compressor's Bundle ID |
-
-### Fields
+| **Type** | Constant |
+| **Description** | Compressor's Bundle ID |
-#### [isFrontmost](#isfrontmost)
-| **Signature** | `cp.apple.compressor.isFrontmost ` |
+#### [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
+| **Signature** | `cp.apple.compressor.EARLIEST_SUPPORTED_VERSION ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is Compressor Frontmost? |
-
-#### [isInstalled](#isinstalled)
-| **Signature** | `cp.apple.compressor.isInstalled ` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is a supported version of Compressor Installed? |
-
-#### [isRunning](#isrunning)
-| **Signature** | `cp.apple.compressor.isRunning ` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the app is running? |
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.compressor.isShowing ` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is Compressor Showing? |
+| **Type** | Constant |
+| **Description** | The earliest version this API supports. |
### Methods
-#### [application](#application)
-| **Signature** | `cp.apple.compressor:application() -> hs.application` |
+#### [bundleID](#bundleid)
+| **Signature** | `cp.apple.compressor:bundleID() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the hs.application for Compressor. |
+| **Type** | Method |
+| **Description** | Returns the Compressor Bundle ID |
| **Parameters** | |
-| **Returns** | - The hs.application, or nil if the application is not installed.
|
+| **Returns** | - A string of the Compressor Bundle ID
|
-#### [getBundleID](#getbundleid)
-| **Signature** | `cp.apple.compressor:getBundleID() -> string` |
+#### [doRestart](#dorestart)
+| **Signature** | `cp.apple.compressor:doRestart() -> cp.rx.go.Statement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Compressor Bundle ID |
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will restart the application. |
| **Parameters** | |
-| **Returns** | - A string of the Compressor Bundle ID
|
-
-#### [getVersion](#getversion)
-| **Signature** | `cp.apple.compressor:getVersion() -> string | nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Version of Compressor |
-| **Parameters** | |
-| **Returns** | - Version as string or nil if an error occurred
|
-| **Notes** | - If Compressor is running it will get the version of the active Compressor application, otherwise, it will use hs.application.infoForBundleID() to find the version.
|
+| **Returns** | true if the application was running and restarted successfully.
|
#### [hide](#hide)
-| **Signature** | `cp.apple.compressor:hide() -> cp.apple.compressor object` |
+| **Signature** | `cp.apple.compressor:hide() -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Hides Compressor |
+| **Type** | Method |
+| **Description** | Hides Compressor |
| **Parameters** | |
-| **Returns** | - An `cp.apple.compressor` object otherwise `nil`
|
+| **Returns** | |
#### [launch](#launch)
-| **Signature** | `cp.apple.compressor:launch() -> boolean` |
+| **Signature** | `cp.apple.compressor:launch([waitSeconds]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Launches Compressor, or brings it to the front if it was already running. |
+| **Parameters** | - waitSeconds - if provided, we will wait for up to the specified seconds for the launch to complete.
|
+| **Returns** | true if Compressor was either launched or focused, otherwise false (e.g. if Compressor doesn't exist)
|
+
+#### [notifier](#notifier)
+| **Signature** | `cp.apple.compressor:notifier() -> cp.ui.notifier` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Launches Compressor, or brings it to the front if it was already running. |
+| **Type** | Method |
+| **Description** | Returns a notifier that is tracking the application UI element. It has already been started. |
| **Parameters** | |
-| **Returns** | - `true` if Compressor was either launched or focused, otherwise false (e.g. if Compressor doesn't exist)
|
+| **Returns** | |
#### [path](#path)
| **Signature** | `cp.apple.compressor:path() -> string or nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Path to Compressor Application |
+| **Type** | Method |
+| **Description** | Path to Compressor Application |
| **Parameters** | |
-| **Returns** | - A string containing Compressor's filesystem path, or `nil` if the bundle identifier could not be located
|
+| **Returns** | - A string containing Compressor's filesystem path, or
nil if the bundle identifier could not be located
|
#### [quit](#quit)
-| **Signature** | `cp.apple.compressor:quit() -> cp.apple.compressor object` |
+| **Signature** | `cp.apple.compressor:quit([waitSeconds]) -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Quits Compressor |
-| **Parameters** | |
-| **Returns** | - An `cp.apple.compressor` object otherwise `nil`
|
-
-#### [restart](#restart)
-| **Signature** | `cp.apple.compressor:restart() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Restart the application. |
-| **Parameters** | |
-| **Returns** | - `true` if the application was running and restarted successfully.
|
+| **Type** | Method |
+| **Description** | Quits Compressor |
+| **Parameters** | - waitSeconds - if provided, we will wait for the specified time for the quit to complete before returning.
|
+| **Returns** | |
#### [show](#show)
-| **Signature** | `cp.apple.compressor:show() -> cp.apple.compressor object` |
+| **Signature** | `cp.apple.compressor:show() -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Activate Compressor |
+| **Type** | Method |
+| **Description** | Activate Compressor |
| **Parameters** | |
-| **Returns** | - An `cp.apple.compressor` object otherwise `nil`
|
+| **Returns** | |
diff --git a/api/cp/cp.apple.fcpxml.compoundClip.md b/api/cp/cp.apple.fcpxml.compoundClip.md
new file mode 100644
index 0000000..1bdcce1
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.compoundClip.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.compoundClip
+---
+
+FCPXML Document Compound Clip Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.compoundClip.new(name, ref, offset, duration, startTimecode, useAudioSubroles) -> fcpxmlCompoundClip Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new ref-clip FCPXML Document object. |
+| **Parameters** | - name - The name of the Compound Clip as string.
- ref - The reference ID of the compound clip as string.
- offset - The offset of the compound clip in flicks.
- duration - The duration of the compound clip in flicks.
- startTimecode - The start timecode in flicks.
- useAudioSubroles - A boolean.
|
+| **Returns** | - A new Compound Clip object.
|
+
diff --git a/api/cp/cp.apple.fcpxml.event.md b/api/cp/cp.apple.fcpxml.event.md
new file mode 100644
index 0000000..039c853
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.event.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.event
+---
+
+FCPXML Document Event Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.event.new(name[, items]) -> fcpxmlEvent Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new event object. |
+| **Parameters** | - name - The name of the event.
- items - An optional table of items to add to the event.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.fcpxml.gap.md b/api/cp/cp.apple.fcpxml.gap.md
new file mode 100644
index 0000000..8917778
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.gap.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.gap
+---
+
+FCPXML Document Gap Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.gap.new(offset, duration, startTimecode) -> fcpxmlGap Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new gap to be used in a timeline. |
+| **Parameters** | - offset - The offset of the Gap clip in flicks.
- duration - The duration of the Gap clip in flicks.
- startTimecode - The start timecode of the Gap clip in flicks.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.fcpxml.md b/api/cp/cp.apple.fcpxml.md
new file mode 100644
index 0000000..d87c96c
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.md
@@ -0,0 +1,553 @@
+# [docs](index.md) » cp.apple.fcpxml
+---
+
+This extension adds functions and methods that simplify the creation
+and management of the FCPXML document structure. It allows you to load FCPXML files
+from file, or build them from scratch using Lua - which you can then export back to a
+FCPXML file.
+
+With the Final Cut Pro X XML (FCPXML) format, you can transfer the details of your
+events and projects between Final Cut Pro X and third-party applications, devices,
+and media asset management tools that do not natively recognize Final Cut Pro X events
+or projects. FCPXML 1.8 requires Final Cut Pro X 10.4.1 or later.
+
+FCPXML describes certain aspects of projects and events that are useful for other
+applications. It does not describe all possible data, and therefore is not a substitute
+for the native project and event data organized in a library bundle.
+
+You can use Final Cut Pro X to export and import FCPXML documents to accomplish the following tasks:
+ * Exchange Final Cut Pro X event and project data with other applications.
+ * Create new Final Cut Pro X events and projects.
+
+The Key Features of this extension include:
+ * Access an FCPXML document’s resources, events, clips, and projects through simple object properties.
+ * Create and modify resources, events, clips, and projects with included properties and methods.
+ * Easily manipulate timing values.
+ * Output FCPXML files with proper text formatting.
+ * Validate FCPXML documents with the DTD.
+
+Here is a list of Final Cut Pro X terms used in this extension:
+
+ * A clip is a reference to media, such as a video, audio, or still image file, that allows
+ you to edit and annotate the media without directly modifying it. A clip controls which
+ portions of the media you would like to use, and it allows you to organize the media based
+ on keywords you have applied. Clips can also contain other clips to represent composite media.
+ * Use a Final Cut Pro X project and its primary container, a sequence, to build a finished movie.
+ The sequence defines your movie’s final appearance. You build a sequence by bringing clips into
+ it from one or more events, or by creating new clips within the sequence. You adjust and arrange
+ the clips, along with other story elements in the sequence, to produce your movie. Every clip in
+ a project is unique to that project (not shared), but referenced media always resides in an event
+ and may be shared across more than one project.
+ * Use a Final Cut Pro X event to store and organize clips and projects. You can import media files
+ into a new or existing event. You can copy these files into an event’s own media folder, or reference
+ them in their original locations. Final Cut Pro X tracks each imported file as an asset and ensures
+ your event contains at least one clip per asset.
+ * Use a Final Cut Pro X library to organize your events. The library is a container that you use to
+ keep track of all events, projects, and media related to your work.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## Submodules
+ * [cp.apple.fcpxml.compoundClip](cp.apple.fcpxml.compoundClip.md)
+ * [cp.apple.fcpxml.event](cp.apple.fcpxml.event.md)
+ * [cp.apple.fcpxml.gap](cp.apple.fcpxml.gap.md)
+ * [cp.apple.fcpxml.multicamClip](cp.apple.fcpxml.multicamClip.md)
+ * [cp.apple.fcpxml.multicamResource](cp.apple.fcpxml.multicamResource.md)
+ * [cp.apple.fcpxml.project](cp.apple.fcpxml.project.md)
+ * [cp.apple.fcpxml.resource](cp.apple.fcpxml.resource.md)
+ * [cp.apple.fcpxml.secondaryStoryline](cp.apple.fcpxml.secondaryStoryline.md)
+ * [cp.apple.fcpxml.title](cp.apple.fcpxml.title.md)
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [ANCHOR_ITEMS](#anchor_items)
+ * [AUDIO_FADE_TYPE](#audio_fade_type)
+ * [AUDIO_OUTPUT_CHANNEL](#audio_output_channel)
+ * [AUDIO_SAMPLE_RATE](#audio_sample_rate)
+ * [CLIP_ITEMS](#clip_items)
+ * [COLLECTION_TYPES](#collection_types)
+ * [COLOR_SPACE](#color_space)
+ * [COLOR_SPACE_OVERRIDE](#color_space_override)
+ * [EQ_MODE](#eq_mode)
+ * [EVENT_ITEM_TYPES](#event_item_types)
+ * [FIELD_ORDER](#field_order)
+ * [MARKER_ITEMS](#marker_items)
+ * [METADATA_TYPES](#metadata_types)
+ * [PROJECTION](#projection)
+ * [PROJECTION_OVERRIDE](#projection_override)
+ * [RESOURCE_TYPES](#resource_types)
+ * [STEREOSCOPIC](#stereoscopic)
+ * [STEREOSCOPIC_OVERRIDE](#stereoscopic_override)
+ * [TIMECODE_FORMAT](#timecode_format)
+* Functions - API calls offered directly by the extension
+ * [latestDTDVersion](#latestdtdversion)
+ * [supportedDTDs](#supporteddtds)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+ * [newCompoundClip](#newcompoundclip)
+ * [newEvent](#newevent)
+ * [newGap](#newgap)
+ * [newMulticamClip](#newmulticamclip)
+ * [newMulticamResource](#newmulticamresource)
+ * [newProject](#newproject)
+ * [newResource](#newresource)
+ * [newSecondaryStoryline](#newsecondarystoryline)
+ * [newTitle](#newtitle)
+ * [open](#open)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [add](#add)
+ * [allClips](#allclips)
+ * [allEventItemNames](#alleventitemnames)
+ * [allEventItems](#alleventitems)
+ * [allProjectNames](#allprojectnames)
+ * [allProjects](#allprojects)
+ * [assetResources](#assetresources)
+ * [compoundResources](#compoundresources)
+ * [effectResources](#effectresources)
+ * [eventNames](#eventnames)
+ * [events](#events)
+ * [formatResources](#formatresources)
+ * [lastResourceID](#lastresourceid)
+ * [lastTextStyleID](#lasttextstyleid)
+ * [library](#library)
+ * [multicamResources](#multicamresources)
+ * [remove](#remove)
+ * [removeAllEvents](#removeallevents)
+ * [removeAllResources](#removeallresources)
+ * [resource](#resource)
+ * [resources](#resources)
+ * [roles](#roles)
+ * [saveToFile](#savetofile)
+ * [valid](#valid)
+ * [xmlVersion](#xmlversion)
+
+## API Documentation
+
+### Constants
+
+#### [ANCHOR_ITEMS](#anchor_items)
+| **Signature** | `cp.apple.fcpxml.ANCHOR_ITEMS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Anchor Item Values. The 'anchor_item' entity declares the valid anchorable story elements. When present, anchored items must have a non-zero 'lane' value. |
+
+#### [AUDIO_FADE_TYPE](#audio_fade_type)
+| **Signature** | `cp.apple.fcpxml.AUDIO_FADE_TYPE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Audio Fade Type Values. |
+
+#### [AUDIO_OUTPUT_CHANNEL](#audio_output_channel)
+| **Signature** | `cp.apple.fcpxml.AUDIO_OUTPUT_CHANNEL -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Audio Output Channel Values. |
+
+#### [AUDIO_SAMPLE_RATE](#audio_sample_rate)
+| **Signature** | `cp.apple.fcpxml.AUDIO_SAMPLE_RATE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Audio Sample Rate values. |
+
+#### [CLIP_ITEMS](#clip_items)
+| **Signature** | `cp.apple.fcpxml.CLIP_ITEMS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Clip Item Values. The 'clip_item' entity declares the primary story elements that may appear inside a clip. |
+
+#### [COLLECTION_TYPES](#collection_types)
+| **Signature** | `cp.apple.fcpxml.COLLECTION_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Collection Types in FCPXML Documents. |
+
+#### [COLOR_SPACE](#color_space)
+| **Signature** | `cp.apple.fcpxml.COLOR_SPACE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Field Order values. |
+
+#### [COLOR_SPACE_OVERRIDE](#color_space_override)
+| **Signature** | `cp.apple.fcpxml.COLOR_SPACE_OVERRIDE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Color Space Override values. |
+
+#### [EQ_MODE](#eq_mode)
+| **Signature** | `cp.apple.fcpxml.EQ_MODE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported EQ Mode Values. |
+
+#### [EVENT_ITEM_TYPES](#event_item_types)
+| **Signature** | `cp.apple.fcpxml.EVENT_ITEM_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Event Item Types in FCPXML Documents. |
+
+#### [FIELD_ORDER](#field_order)
+| **Signature** | `cp.apple.fcpxml.FIELD_ORDER -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Field Order values. |
+
+#### [MARKER_ITEMS](#marker_items)
+| **Signature** | `cp.apple.fcpxml.MARKER_ITEMS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Marker Item Values. |
+
+#### [METADATA_TYPES](#metadata_types)
+| **Signature** | `cp.apple.fcpxml.METADATA_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Metadata Types in FCPXML Documents. |
+
+#### [PROJECTION](#projection)
+| **Signature** | `cp.apple.fcpxml.PROJECTION -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Projection values. |
+
+#### [PROJECTION_OVERRIDE](#projection_override)
+| **Signature** | `cp.apple.fcpxml.PROJECTION_OVERRIDE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Projection Override values. |
+
+#### [RESOURCE_TYPES](#resource_types)
+| **Signature** | `cp.apple.fcpxml.RESOURCE_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Resource Types in FCPXML Documents. |
+
+#### [STEREOSCOPIC](#stereoscopic)
+| **Signature** | `cp.apple.fcpxml.STEREOSCOPIC -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Stereoscopic values. |
+
+#### [STEREOSCOPIC_OVERRIDE](#stereoscopic_override)
+| **Signature** | `cp.apple.fcpxml.STEREOSCOPIC_OVERRIDE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Stereoscopic Override values. |
+
+#### [TIMECODE_FORMAT](#timecode_format)
+| **Signature** | `cp.apple.fcpxml.TIMECODE_FORMAT -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Supported Timecode Format values. |
+
+### Functions
+
+#### [latestDTDVersion](#latestdtdversion)
+| **Signature** | `cp.apple.fcpxml.latestDTDVersion() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the latest supported FCPXML DTD version. |
+| **Parameters** | |
+| **Returns** | - The latest DTD version as a string, for example: "1.8".
|
+
+#### [supportedDTDs](#supporteddtds)
+| **Signature** | `cp.apple.fcpxml.supportedDTDs() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a table containing the version numbers of all the DTD documents included in this extension. |
+| **Parameters** | |
+| **Returns** | - A table of supported DTD versions as strings.
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.new() -> fcpxmlDocument Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Create a new empty FCPXML Document object. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [newCompoundClip](#newcompoundclip)
+| **Signature** | `cp.apple.fcpxml.newCompoundClip(name, ref, offset, duration, startTimecode, useAudioSubroles) -> fcpxmlCompoundClip Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new ref-clip FCPXML Document object. |
+| **Parameters** | - name - The name of the Compound Clip as string.
- ref - The reference ID of the compound clip as string.
- offset - The offset of the compound clip in flicks.
- duration - The duration of the compound clip in flicks.
- startTimecode - The start timecode in flicks.
- useAudioSubroles - A boolean.
|
+| **Returns** | - A new Compound Clip object.
|
+
+#### [newEvent](#newevent)
+| **Signature** | `cp.apple.fcpxml.newEvent(name[, items]) -> fcpxmlEvent Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new event object. |
+| **Parameters** | - name - The name of the event.
- items - An optional table of items to add to the event.
|
+| **Returns** | |
+
+#### [newGap](#newgap)
+| **Signature** | `cp.apple.fcpxml.newGap(offset, duration, startTimecode) -> fcpxmlGap Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new gap to be used in a timeline. |
+| **Parameters** | - offset - The offset of the Gap clip in flicks.
- duration - The duration of the Gap clip in flicks.
- startTimecode - The start timecode of the Gap clip in flicks.
|
+| **Returns** | |
+
+#### [newMulticamClip](#newmulticamclip)
+| **Signature** | `cp.apple.fcpxml.newMulticamClip(name, refID, offset, startTimecode, duration, mcSources) -> fcpxmlMulticamClip Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new multicam event clip FCPXML Document object. |
+| **Parameters** | - name - The name of the Multicam Clip as a string.
- refID - The reference ID of the Multicam Clip.
- offset - The offset of the Multicam clip in flicks.
- startTimecode - The start timecode in flicks.
- duration - The duration of the Multicam clip.
- mcSources - A table of multicam sources.
|
+| **Returns** | - A new Multicam Clip object.
|
+
+#### [newMulticamResource](#newmulticamresource)
+| **Signature** | `cp.apple.fcpxml.newMulticamResource(name, id, formatRef, startTimecode, timecodeFormat, renderColorSpace, angles) -> fcpxmlMulticamResource Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new FCPXML multicam reference FCPXML Document object. |
+| **Parameters** | - name - The name of the Multicam Resource as a string.
- id - The ID of the Multicam Resource as a string.
- formatRef - The format of the Multicam Resource.
- startTimecode - The start timecode in flicks.
- timecodeFormat - The timecode format (see:
cp.apple.fcpxml.TIMECODE_FORMAT). - renderColorSpace - The render color space (see:
cp.apple.fcpxml.COLOR_SPACE). - angles - A table of angle objects.
|
+| **Returns** | - A new Multicam Resource object.
|
+
+#### [newProject](#newproject)
+| **Signature** | `cp.apple.fcpxml.newProject(name, format, duration, timecodeStart, timecodeFormat, audioLayout, audioRate, renderColorSpace[, clips]) -> fcpxmlProject Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new project FCPXML object and optionally adds clips to it. |
+| **Parameters** | - name - The name of the project as a string.
- format - The format of the project.
- duration - The duration of the project.
- timecodeStart - The start timecode of the project.
- timecodeFormat - The timecode format of the project.
- audioLayout - The audio layout of the project.
- audioRate - The audio sample rate of the project.
- renderColorSpace - The render color space of the project.
- clips - An optional table of clips you want to add to the project.
|
+| **Returns** | |
+
+#### [newResource](#newresource)
+| **Signature** | `cp.apple.fcpxml.newResource() -> fcpxmlResource Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new resource object. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [newSecondaryStoryline](#newsecondarystoryline)
+| **Signature** | `cp.apple.fcpxml.newSecondaryStoryline(lane, offset, formatRef, clips) -> fcpxmlSecondaryStoryline Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new secondary storyline FCPXML Document object. |
+| **Parameters** | - lane - The lane you want the secondary storyline to appear.
- offset - The offset of the secondary storyline in flicks.
- formatRef - The format of the secondary storyline.
- clips - A table of clips.
|
+| **Returns** | - A new Secondary Storyline object.
|
+
+#### [newTitle](#newtitle)
+| **Signature** | `cp.apple.fcpxml.newTitle(titleName, lane, offset, ref, duration, start, role, titleText, textStyleID, newTextStyle, newTextStyleAttributes) -> fcpxmlTitle Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new title to be used in a timeline. |
+| **Parameters** | - titleName
- lane
- offset
- ref
- duration
- start
- role
- titleText
- textStyleID
- newTextStyle
- newTextStyleAttributes
|
+| **Returns** | |
+| **Notes** | newTextStyleAttributes is only used if newTextStyle is set to true.- When
newTextStyle is set to true, the following atttributes can be used within the newTextStyleAttributes table:- font - The font name as string (defaults to "Helvetica").
- fontSize - The font size a number (defaults to 62).
- fontFace - The font face as a string (defaults to "Regular").
- fontColor - The font color as a
hs.drawing.color object (defaults to black). - strokeColor - The stroke color as a
hs.drawing.color object (defaults to nil). - strokeWidth - The stroke width as a number (defaults to 2).
- shadowColor - The stroke color as a
hs.drawing.color object (defaults to nil). - shadowDistance - The shadow distance as a number (defaults to 5).
- shadowAngle - The shadow angle as a number (defaults to 315).
- shadowBlurRadius - The shadow blur radius as a number (defaults to 1).
- alignment - The text alignment as a string (defaults to "center").
- xPosition - The x position of the title (defaults to 0).
- yPosition - The y position of the title (defaults to 0).
|
+
+#### [open](#open)
+| **Signature** | `cp.apple.fcpxml.open(file) -> fcpxmlDocument Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Create a new FCPXML Document object from the specified file. |
+| **Parameters** | - file - An FCPXML document you want to read from an external file.
|
+| **Returns** | |
+
+### Methods
+
+#### [add](#add)
+| **Signature** | `cp.apple.fcpxml:add(resources) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds one or more resources to the FCPXML document. |
+| **Parameters** | - resources - A single
resourceObject or a table of resourceObject's to add to the FCPXML document.
|
+| **Returns** | true if successfully added, otherwise false.
|
+
+#### [allClips](#allclips)
+| **Signature** | `cp.apple.fcpxml:allClips() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all clips in all events in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [allEventItemNames](#alleventitemnames)
+| **Signature** | `cp.apple.fcpxml:allEventItemNames() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The names of all items from all events. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [allEventItems](#alleventitems)
+| **Signature** | `cp.apple.fcpxml:allEventItems() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | All items from all events. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [allProjectNames](#allprojectnames)
+| **Signature** | `cp.apple.fcpxml:allProjectNames() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The names of all projects from all events. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [allProjects](#allprojects)
+| **Signature** | `cp.apple.fcpxml:allProjects() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all projects in all events in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [assetResources](#assetresources)
+| **Signature** | `cp.apple.fcpxml:assetResources(file) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns asset resources that match the given file. |
+| **Parameters** | |
+| **Returns** | - A table of resource objects or
nil if no assets match.
|
+
+#### [compoundResources](#compoundresources)
+| **Signature** | `cp.apple.fcpxml:compoundResources() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all compound clip resources in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [effectResources](#effectresources)
+| **Signature** | `cp.apple.fcpxml:effectResources() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all effect resources in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [eventNames](#eventnames)
+| **Signature** | `cp.apple.fcpxml:eventNames() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The names of all events as strings in a table. |
+| **Parameters** | |
+| **Returns** | - A table containing all of the event names as strings.
|
+
+#### [events](#events)
+| **Signature** | `cp.apple.fcpxml:events() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all event elements in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [formatResources](#formatresources)
+| **Signature** | `cp.apple.fcpxml:formatResources() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all format resources in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [lastResourceID](#lastresourceid)
+| **Signature** | `cp.apple.fcpxml:lastResourceID() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The highest resource ID number used in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [lastTextStyleID](#lasttextstyleid)
+| **Signature** | `cp.apple.fcpxml:lastTextStyleID() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The highest text style ID number used in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [library](#library)
+| **Signature** | `cp.apple.fcpxml:library() -> libraryObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the Final Cut Pro Library. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [multicamResources](#multicamresources)
+| **Signature** | `cp.apple.fcpxml:multicamResources() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all multicam resources in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [remove](#remove)
+| **Signature** | `cp.apple.fcpxml:remove(resources) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Removes one or more resources from the FCPXML document. |
+| **Parameters** | - resources - A single
resourceObject or a table of resourceObject's to add to the FCPXML document.
|
+| **Returns** | true if successfully removed, otherwise false.
|
+
+#### [removeAllEvents](#removeallevents)
+| **Signature** | `cp.apple.fcpxml:removeAllEvents() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Removes all events from the library. |
+| **Parameters** | |
+| **Returns** | true if successful, otherwise false.
|
+
+#### [removeAllResources](#removeallresources)
+| **Signature** | `cp.apple.fcpxml:removeAllResources() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Removes all resources from the FCPXML document. |
+| **Parameters** | |
+| **Returns** | true if successful, otherwise false.
|
+
+#### [resource](#resource)
+| **Signature** | `cp.apple.fcpxml:resource(id) -> resourceObject | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the resource that matches the given ID string. |
+| **Parameters** | - id - The ID string of the resource you want to access.
|
+| **Returns** | - A resource object or
nil if the resource does not exist.
|
+
+#### [resources](#resources)
+| **Signature** | `cp.apple.fcpxml:resources() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all resources in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [roles](#roles)
+| **Signature** | `cp.apple.fcpxml:roles() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | An table of all roles used in the FCPXML document. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [saveToFile](#savetofile)
+| **Signature** | `cp.apple.fcpxml:saveToFile(filename) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the FCPML Document to the specified filename. |
+| **Parameters** | - filename - the path and name of the file to save.
|
+| **Returns** | - Status - a boolean value indicating success (
true) or failure (false).
|
+
+#### [valid](#valid)
+| **Signature** | `cp.apple.fcpxml:valid(filename[, version]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Validates an FCPXML document against a document type definition (DTD). |
+| **Parameters** | - filename - The path and filename of the FCPXML document you want to validate.
- version - The optional FCPXML version you want to validate against.
|
+| **Returns** | true if valid, otherwise false.
|
+
+#### [xmlVersion](#xmlversion)
+| **Signature** | `cp.apple.fcpxml:xmlVersion([version]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets or sets the FCPXML version of the FCPXML document. |
+| **Parameters** | - version - An optional string to set the version of the FCPXML document (for example: "1.8").
|
+| **Returns** | - A string containing the XML version of the FCPXML document.
|
+
diff --git a/api/cp/cp.apple.fcpxml.multicamClip.md b/api/cp/cp.apple.fcpxml.multicamClip.md
new file mode 100644
index 0000000..4e1b333
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.multicamClip.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.multicamClip
+---
+
+FCPXML Document Multicam Clip Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.multicamClip.new(name, refID, offset, startTimecode, duration, mcSources) -> fcpxmlMulticamClip Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new multicam event clip FCPXML Document object. |
+| **Parameters** | - name - The name of the Multicam Clip as a string.
- refID - The reference ID of the Multicam Clip.
- offset - The offset of the Multicam clip in flicks.
- startTimecode - The start timecode in flicks.
- duration - The duration of the Multicam clip.
- mcSources - A table of multicam sources.
|
+| **Returns** | - A new Multicam Clip object.
|
+
diff --git a/api/cp/cp.apple.fcpxml.multicamResource.md b/api/cp/cp.apple.fcpxml.multicamResource.md
new file mode 100644
index 0000000..1ef55f2
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.multicamResource.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.multicamResource
+---
+
+FCPXML Document Multicam Resource Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.multicamResource.new(name, id, formatRef, startTimecode, timecodeFormat, renderColorSpace, angles) -> fcpxmlMulticamResource Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new FCPXML multicam reference FCPXML Document object. |
+| **Parameters** | - name - The name of the Multicam Resource as a string.
- id - The ID of the Multicam Resource as a string.
- formatRef - The format of the Multicam Resource.
- startTimecode - The start timecode in flicks.
- timecodeFormat - The timecode format (see:
cp.apple.fcpxml.TIMECODE_FORMAT). - renderColorSpace - The render color space (see:
cp.apple.fcpxml.COLOR_SPACE). - angles - A table of angle objects.
|
+| **Returns** | - A new Multicam Resource object.
|
+
diff --git a/api/cp/cp.apple.fcpxml.project.md b/api/cp/cp.apple.fcpxml.project.md
new file mode 100644
index 0000000..c27a2a0
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.project.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.project
+---
+
+FCPXML Document Project Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.project.new(name, format, duration, timecodeStart, timecodeFormat, audioLayout, audioRate, renderColorSpace[, clips]) -> fcpxmlProject Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new project FCPXML object and optionally adds clips to it. |
+| **Parameters** | - name - The name of the project as a string.
- format - The format of the project.
- duration - The duration of the project.
- timecodeStart - The start timecode of the project.
- timecodeFormat - The timecode format of the project.
- audioLayout - The audio layout of the project.
- audioRate - The audio sample rate of the project.
- renderColorSpace - The render color space of the project.
- clips - An optional table of clips you want to add to the project.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.fcpxml.resource.md b/api/cp/cp.apple.fcpxml.resource.md
new file mode 100644
index 0000000..1209bf5
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.resource.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.resource
+---
+
+FCPXML Document Resource Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.resource.new() -> fcpxmlResource Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new resource object. |
+| **Parameters** | |
+| **Returns** | - A new FCPXML Document Resource object.
|
+
diff --git a/api/cp/cp.apple.fcpxml.secondaryStoryline.md b/api/cp/cp.apple.fcpxml.secondaryStoryline.md
new file mode 100644
index 0000000..f5bb3d2
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.secondaryStoryline.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.apple.fcpxml.secondaryStoryline
+---
+
+FCPXML Document Secondary Storyline Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.secondaryStoryline.new(lane, offset, formatRef, clips) -> fcpxmlSecondaryStoryline Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new secondary storyline FCPXML Document object. |
+| **Parameters** | - lane - The lane you want the secondary storyline to appear.
- offset - The offset of the secondary storyline in flicks.
- formatRef - The format of the secondary storyline.
- clips - A table of clips.
|
+| **Returns** | - A new Secondary Storyline object.
|
+
diff --git a/api/cp/cp.apple.fcpxml.title.md b/api/cp/cp.apple.fcpxml.title.md
new file mode 100644
index 0000000..2e2c7e7
--- /dev/null
+++ b/api/cp/cp.apple.fcpxml.title.md
@@ -0,0 +1,25 @@
+# [docs](index.md) » cp.apple.fcpxml.title
+---
+
+FCPXML Document Title Object.
+
+This extension was inspired and uses code based on [Pipeline](https://github.com/reuelk/pipeline).
+Thank you Reuel Kim for making something truly awesome, and releasing it as Open Source!
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.fcpxml.title.new(titleName, lane, offset, ref, duration, start, role, titleText, textStyleID, newTextStyle, newTextStyleAttributes) -> fcpxmlTitle Object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new title to be used in a timeline. |
+| **Parameters** | - titleName
- lane
- offset
- ref
- duration
- start
- role
- titleText
- textStyleID
- newTextStyle
- newTextStyleAttributes
|
+| **Returns** | |
+| **Notes** | newTextStyleAttributes is only used if newTextStyle is set to true.- When
newTextStyle is set to true, the following atttributes can be used within the newTextStyleAttributes table:- font - The font name as string (defaults to "Helvetica").
- fontSize - The font size a number (defaults to 62).
- fontFace - The font face as a string (defaults to "Regular").
- fontColor - The font color as a
hs.drawing.color object (defaults to black). - strokeColor - The stroke color as a
hs.drawing.color object (defaults to nil). - strokeWidth - The stroke width as a number (defaults to 2).
- shadowColor - The stroke color as a
hs.drawing.color object (defaults to nil). - shadowDistance - The shadow distance as a number (defaults to 5).
- shadowAngle - The shadow angle as a number (defaults to 315).
- shadowBlurRadius - The shadow blur radius as a number (defaults to 1).
- alignment - The text alignment as a string (defaults to "center").
- xPosition - The x position of the title (defaults to 0).
- yPosition - The y position of the title (defaults to 0).
|
+
diff --git a/api/cp/cp.apple.finalcutpro.MenuBar.md b/api/cp/cp.apple.finalcutpro.MenuBar.md
deleted file mode 100644
index 1c99572..0000000
--- a/api/cp/cp.apple.finalcutpro.MenuBar.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.MenuBar
----
-
-Represents the Final Cut Pro menu bar, providing functions that allow different tasks to be accomplished.
-
-## API Overview
-* Functions - API calls offered directly by the extension
- * [new](#new)
- * [selectMenu](#selectmenu)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [addMenuFinder](#addmenufinder)
- * [findMenuUI](#findmenuui)
- * [visitMenuItems](#visitmenuitems)
-
-## API Documentation
-
-### Functions
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.MenuBar:new(App) -> MenuBar` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Constructs a new MenuBar for the specified App. |
-| **Parameters** | - app - The App instance the MenuBar belongs to.
|
-| **Returns** | |
-
-#### [selectMenu](#selectmenu)
-| **Signature** | `cp.apple.finalcutpro.MenuBar:selectMenu(path) -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Selects a Final Cut Pro Menu Item based on the list of menu titles in English. |
-| **Parameters** | - path - The list of menu items you'd like to activate, for example:
- select({"View", "Browser", "as List"})
|
-| **Returns** | - `true` if the press was successful.
|
-
-### Methods
-
-#### [addMenuFinder](#addmenufinder)
-| **Signature** | `cp.apple.finalcutpro.MenuBar:addMenuFinder(finder) -> nothing` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Registers an `AXMenuItem` finder function. The finder's job is to take an individual 'find' step and return either the matching child, or nil if it can't be found. It is used by the [addMenuFinder](#addMenuFinder) function. The `finder` should have the following signature: |
-| **Parameters** | - `finder` - The finder function
|
-| **Returns** | - The `AXMenuItem` found, or `nil`.
|
-
-#### [findMenuUI](#findmenuui)
-| **Signature** | `cp.apple.finalcutpro.MenuBar:findMenuUI(path) -> Menu UI` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds a specific Menu UI element for the provided path. |
-| **Parameters** | - `path` - The path list to search for.
- `language` - The language code the path is in. E.g. "en" or "fr". Defaults to the
|
-| **Returns** | - The Menu UI, or `nil` if it could not be found.
|
-
-#### [visitMenuItems](#visitmenuitems)
-| **Signature** | `cp.apple.finalcutpro.MenuBar:visitMenuItems(visitFn[, startPath]) -> nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Walks the menu tree, calling the `visitFn` on all the 'item' values - that is, |
-| **Parameters** | - `visitFn` - The function called for each menu item.
- `startPath` - The path to the menu item to start at.
|
-| **Returns** | |
-
diff --git a/api/cp/cp.apple.finalcutpro.WindowWatcher.md b/api/cp/cp.apple.finalcutpro.WindowWatcher.md
deleted file mode 100644
index c94e05a..0000000
--- a/api/cp/cp.apple.finalcutpro.WindowWatcher.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.WindowWatcher
----
-
-Window Watcher Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [new](#new)
- * [unwatch](#unwatch)
- * [watch](#watch)
-
-## API Documentation
-
-### Methods
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.WindowWatcher:new(windowFn) -> WindowWatcher` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new WindowWatcher |
-| **Parameters** | - `window` - the window object (eg. CommandEditor)
|
-| **Returns** | - `WindowWatcher` - the new WindowWatcher instance.
|
-
-#### [unwatch](#unwatch)
-| **Signature** | `cp.apple.finalcutpro.WindowWatcher:unwatch() -> bool` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Removes the watch with the specified ID |
-| **Parameters** | - `id` - The ID returned from `watch` that wants to be removed.
|
-| **Returns** | |
-
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.WindowWatcher:watch() -> bool` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the window |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `show(window)` - Triggered when the window is shown.
- `hide(window)` - Triggered when the window is hidden.
- `open(window)` - Triggered when the window is opened.
- `close(window)` - Triggered when the window is closed.
- `move(window)` - Triggered when the window is moved.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
-
diff --git a/api/cp/cp.apple.finalcutpro.app.md b/api/cp/cp.apple.finalcutpro.app.md
new file mode 100644
index 0000000..1aee3c0
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.app.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.apple.finalcutpro.app
+---
+
+The [cp.app](cp.app.md) for Final Cut Pro. Will automatically determine
+if only the trial version of FCPX is installed and use that instead.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [app](#app)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [application](#application)
+
+## API Documentation
+
+### Constants
+
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.app ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The [app](cp.app.md) for Final Cut Pro. |
+| **Notes** | - All values from app can be accessed directly from the
finalcutpro instance.
|
+
+### Fields
+
+#### [application](#application)
+| **Signature** | `cp.apple.finalcutpro.application ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the running `hs.application` for Final Cut Pro, or `nil` if it's not running. |
+
diff --git a/api/cp/cp.apple.finalcutpro.browser.AppearanceAndFiltering.md b/api/cp/cp.apple.finalcutpro.browser.AppearanceAndFiltering.md
new file mode 100644
index 0000000..92b730b
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.browser.AppearanceAndFiltering.md
@@ -0,0 +1,107 @@
+# [docs](index.md) » cp.apple.finalcutpro.browser.AppearanceAndFiltering
+---
+
+Clip Appearance & Filtering Menu Popover
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [DURATION](#duration)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [AppearanceAndFiltering](#appearanceandfiltering)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [button](#button)
+ * [clipHeight](#clipheight)
+ * [continuousPlayback](#continuousplayback)
+ * [duration](#duration)
+ * [groupBy](#groupby)
+ * [sortBy](#sortby)
+ * [waveforms](#waveforms)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [DURATION](#duration)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.DURATION -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A lookup table of the duration values. |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if a GUI element is the "Clip Appearance & Filtering Menu" popover or not. |
+| **Parameters** | - element - The element you want to check
|
+| **Returns** | true if the element is the "Clip Appearance & Filtering Menu" popover otherwise false
|
+
+### Constructors
+
+#### [AppearanceAndFiltering](#appearanceandfiltering)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering(parent) -> AppearanceAndFiltering` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs a new "Clip Appearance & Filtering Menu" popover. |
+| **Parameters** | - parent - The parent object
|
+| **Returns** | - The new
AppearanceAndFiltering instance.
|
+
+### Fields
+
+#### [button](#button)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.button ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Clip Appearance & Filtering Menu" button. |
+
+#### [clipHeight](#clipheight)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.clipHeight ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Clip Height Slider. |
+
+#### [continuousPlayback](#continuousplayback)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.continuousPlayback ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Continuous Playback checkbox. |
+
+#### [duration](#duration)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.duration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Duration Slider. |
+
+#### [groupBy](#groupby)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.groupBy ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Group By" popup button. |
+
+#### [sortBy](#sortby)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.sortBy ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Sort By" popup button. |
+
+#### [waveforms](#waveforms)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering.waveforms ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Waveforms checkbox. |
+
+### Methods
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.browser.AppearanceAndFiltering:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the "Clip Appearance & Filtering Menu" Popover |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.browser.Columns.md b/api/cp/cp.apple.finalcutpro.browser.Columns.md
new file mode 100644
index 0000000..2168116
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.browser.Columns.md
@@ -0,0 +1,52 @@
+# [docs](index.md) » cp.apple.finalcutpro.browser.Columns
+---
+
+Final Cut Pro Browser List View Columns
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Columns](#columns)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [menu](#menu)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [isMenuShowing](#ismenushowing)
+ * [show](#show)
+
+## API Documentation
+
+### Constructors
+
+#### [Columns](#columns)
+| **Signature** | `cp.apple.finalcutpro.browser.Columns(parent) -> Columns` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs a new Columns object. |
+| **Parameters** | - parent - The parent object
|
+| **Returns** | - The new
Columns instance.
|
+
+### Fields
+
+#### [menu](#menu)
+| **Signature** | `cp.apple.finalcutpro.browser.Columns.menu ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Columns menu object. |
+
+### Methods
+
+#### [isMenuShowing](#ismenushowing)
+| **Signature** | `cp.apple.finalcutpro.browser.Columns:isMenuShowing() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Is the Columns menu popup showing? |
+| **Parameters** | |
+| **Returns** | true if the columns menu popup is showing, otherwise false
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.browser.Columns:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Browser List View columns menu popup. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.cmd.CommandEditor.md b/api/cp/cp.apple.finalcutpro.cmd.CommandEditor.md
index acc7c14..e4a7133 100644
--- a/api/cp/cp.apple.finalcutpro.cmd.CommandEditor.md
+++ b/api/cp/cp.apple.finalcutpro.cmd.CommandEditor.md
@@ -4,28 +4,111 @@
Command Editor Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [CommandEditor](#commandeditor)
* Fields - Variables which can only be accessed from an object returned by a constructor
- * [isShowing](#isshowing)
+ * [close](#close)
+ * [save](#save)
+ * [UI](#ui)
* Methods - API calls which can only be made on an object returned by a constructor
- * [watch](#watch)
+ * [app](#app)
+ * [doClose](#doclose)
+ * [doSave](#dosave)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [CommandEditor](#commandeditor)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor(app) -> CommandEditor` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Command Editor object. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | - A new
CommandEditor object.
|
+
### Fields
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor.isShowing ` |
+#### [close](#close)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor.close ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Close" [Button](cp.ui.Button.md). |
+
+#### [save](#save)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor.save ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Save" [Button](cp.ui.Button.md). |
+
+#### [UI](#ui)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor.UI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Command Editor showing? |
+| **Type** | Field |
+| **Description** | The `axuielement` for the window. |
### Methods
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:watch() -> bool` |
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:app() -> App` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the app instance representing Final Cut Pro. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doClose](#doclose)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:doClose() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that triggers the Close button in the Command Editor. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if the button was found and pushed, otherwise false.
|
+
+#### [doSave](#dosave)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:doSave() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that triggers the Save button in the Command Editor. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if the button was found and pushed, otherwise false.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:doShow() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a [Statement](cp.rx.go.Statement.md) that will attempt to hide the Command Editor, if FCPX is running. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will resolve to true if the CommandEditor is not showing or false if not.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:hide() -> cp.apple.finalcutpro.cmd.CommandEditor` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Command Editor. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.cmd.CommandEditor object for method chaining.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.cmd.CommandEditor:show() -> cp.apple.finalcutpro.cmd.CommandEditor` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the command editor. The optional functions will be called when the window is shown or hidden, respectively. |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `open(window)` - Triggered when the window is shown.
- `close(window)` - Triggered when the window is hidden.
- `move(window)` - Triggered when the window is moved.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Shows the Command Editor. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.cmd.CommandEditor object for method chaining.
|
diff --git a/api/cp/cp.apple.finalcutpro.content.Clip.md b/api/cp/cp.apple.finalcutpro.content.Clip.md
index af3b10f..b51efe2 100644
--- a/api/cp/cp.apple.finalcutpro.content.Clip.md
+++ b/api/cp/cp.apple.finalcutpro.content.Clip.md
@@ -14,6 +14,7 @@ Represents a clip of media inside FCP.
* Methods - API calls which can only be made on an object returned by a constructor
* [getTitle](#gettitle)
* [getType](#gettype)
+ * [setTitle](#settitle)
* [UI](#ui)
## API Documentation
@@ -23,59 +24,67 @@ Represents a clip of media inside FCP.
#### [filmstrip](#filmstrip)
| **Signature** | `cp.apple.finalcutpro.content.Clip.type.filmstrip` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A constant for clips which are represented by a filmstrip. |
+| **Type** | Constant |
+| **Description** | A constant for clips which are represented by a filmstrip. |
#### [row](#row)
| **Signature** | `cp.apple.finalcutpro.content.Clip.type.row` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A constant for clips which are represented by a table row. |
+| **Type** | Constant |
+| **Description** | A constant for clips which are represented by a table row. |
### Functions
#### [is](#is)
| **Signature** | `cp.apple.finalcutpro.content.Clip.is(thing) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the specified `thing` is a `Clip` instance. |
-| **Parameters** | - `thing` - The thing to check.
|
-| **Returns** | - `true` if the `thing` is a `Clip`, otherwise returns `false`.
|
+| **Type** | Function |
+| **Description** | Checks if the specified `thing` is a `Clip` instance. |
+| **Parameters** | thing - The thing to check.
|
+| **Returns** | true if the thing is a Clip, otherwise returns false.
|
### Constructors
#### [new](#new)
| **Signature** | `cp.apple.finalcutpro.content.Clip.new(element[, options]) -> Clip` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new `Clip` pointing at the specified element, with the specified options. |
-| **Parameters** | - `element` - The `axuielement` the clip represents.
- `options` - A table containing the options for the clip.
|
-| **Returns** | |
-| **Notes** | - The options may be:
- ** `columnIndex` - A number which will be used to specify the column number to find the title in, if relevant.
|
+| **Type** | Constructor |
+| **Description** | Creates a new `Clip` pointing at the specified element, with the specified options. |
+| **Parameters** | element - The axuielement the clip represents.options - A table containing the options for the clip.
|
+| **Returns** | |
+| **Notes** | - The options may be: **
columnIndex - A number which will be used to specify the column number to find the title in, if relevant.
|
### Methods
#### [getTitle](#gettitle)
| **Signature** | `cp.apple.finalcutpro.content.Clip:getTitle() -> String` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the title of the clip. |
+| **Type** | Method |
+| **Description** | Returns the title of the clip. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getType](#gettype)
| **Signature** | `cp.apple.finalcutpro.content.Clip:getType() -> Clip.type` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the type of clip (one of the `Clip.type` values) |
+| **Type** | Method |
+| **Description** | Returns the type of clip (one of the `Clip.type` values) |
| **Parameters** | |
-| **Returns** | - The `Clip.type` value (e.g. `Clip.type.row` or Clip.type.filmstrip`)
|
+| **Returns** | - The
Clip.type value (e.g. Clip.type.row or Clip.type.filmstrip`)
|
+
+#### [setTitle](#settitle)
+| **Signature** | `cp.apple.finalcutpro.content.Clip:setTitle(title) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the title of a clip. |
+| **Parameters** | |
+| **Returns** | |
#### [UI](#ui)
| **Signature** | `cp.apple.finalcutpro.content.Clip:UI() -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `axuielement` for the clip. |
+| **Type** | Method |
+| **Description** | Returns the `axuielement` for the clip. |
| **Parameters** | |
-| **Returns** | - The `axuielement` for the clip.
|
+| **Returns** | - The
axuielement for the clip.
|
diff --git a/api/cp/cp.apple.finalcutpro.export.ExportDialog.md b/api/cp/cp.apple.finalcutpro.export.ExportDialog.md
index f5195f6..6a82974 100644
--- a/api/cp/cp.apple.finalcutpro.export.ExportDialog.md
+++ b/api/cp/cp.apple.finalcutpro.export.ExportDialog.md
@@ -4,28 +4,73 @@
Export Dialog Module.
## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ExportDialogTitleText](#exportdialogtitletext)
* Fields - Variables which can only be accessed from an object returned by a constructor
- * [isShowing](#isshowing)
+ * [fileExtension](#fileextension)
+ * [saveSheet](#savesheet)
* Methods - API calls which can only be made on an object returned by a constructor
- * [watch](#watch)
+ * [hide](#hide)
+ * [pressCancel](#presscancel)
+ * [pressNext](#pressnext)
+ * [show](#show)
## API Documentation
+### Constructors
+
+#### [ExportDialogTitleText](#exportdialogtitletext)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialogTitleText(parent)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Export [Dialog](cp.ui.Dialog.md) |
+
### Fields
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.export.ExportDialog.isShowing ` |
+#### [fileExtension](#fileextension)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialog.fileExtension ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the window showing? |
+| **Type** | Field |
+| **Description** | The "File Extension" [StaticText](cp.ui.StaticText.md). |
+
+#### [saveSheet](#savesheet)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialog.saveSheet ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `SaveSheet`. |
### Methods
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.export.ExportDialog:watch() -> string` |
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialog:hide() -> cp.apple.finalcutpro.export.ExportDialog` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Export Dialog |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.export.ExportDialog object for method chaining.
|
+
+#### [pressCancel](#presscancel)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialog:pressCancel() -> cp.apple.finalcutpro.export.ExportDialog` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the Cancel Button. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.export.ExportDialog object for method chaining.
|
+
+#### [pressNext](#pressnext)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialog:pressNext() -> cp.apple.finalcutpro.export.ExportDialog` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the Next Button. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.export.ExportDialog object for method chaining.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.export.ExportDialog:show(destinationSelect, ignoreProxyWarning, ignoreMissingMedia, ignoreInvalidCaptions, quiet) -> cp.apple.finalcutpro.export.ExportDialog, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the command editor. The optional functions will be called when the window is shown or hidden, respectively. |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `show(CommandEditor)` - Triggered when the window is shown.
- `hide(CommandEditor)` - Triggered when the window is hidden.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Shows the Export Dialog with the Destination that matches the `destinationSelect`. |
+| **Parameters** | - destinationSelect - The name, number or match function of the destination to export with.
- ignoreProxyWarning - if
true, the warning regarding exporting Proxies will be ignored. - ignoreMissingMedia - if
true, the warning regarding exporting with missing media will be ignored. - ignoreInvalidCaptions - if
true, the warning regarding exporting with Bad Captions will be ignored. - quiet - if
true, no dialogs will be shown if there is an error.
|
+| **Returns** | - The
cp.apple.finalcutpro.export.ExportDialog object for method chaining. - If an error occurred, the message is returned as the second value
|
+| **Notes** | - If providing a function, it will be passed one item - the name of the destination, and should return
true to indicate a match. The name will not contain " (default)" if present.
|
diff --git a/api/cp/cp.apple.finalcutpro.export.GoToPrompt.md b/api/cp/cp.apple.finalcutpro.export.GoToPrompt.md
index 1dcd41b..e46c1b1 100644
--- a/api/cp/cp.apple.finalcutpro.export.GoToPrompt.md
+++ b/api/cp/cp.apple.finalcutpro.export.GoToPrompt.md
@@ -4,16 +4,106 @@
Go To Prompt.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+ * [new](#new)
* Fields - Variables which can only be accessed from an object returned by a constructor
- * [isShowing](#isshowing)
+ * [cancel](#cancel)
+ * [go](#go)
+ * [valueCombo](#valuecombo)
+ * [valueText](#valuetext)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [hide](#hide)
+ * [setValue](#setvalue)
+ * [show](#show)
+ * [value](#value)
+ * [valueField](#valuefield)
## API Documentation
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+#### [new](#new)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.new(app) -> GoToPrompt` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new Go To Prompt object. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | |
+
### Fields
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.isShowing ` |
+#### [cancel](#cancel)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.cancel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Cancel" `Button`. |
+
+#### [go](#go)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.go ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Go" `Button`. |
+
+#### [valueCombo](#valuecombo)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.valueCombo ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `ComboBox` containing the folder value, if available. |
+
+#### [valueText](#valuetext)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt.valueText ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `TextField` containing the folder value, if available. |
+
+### Methods
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt:hide() -> cp.apple.finalcutpro.export.GoToPrompt` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Go To Prompt |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.export.GoToPrompt object for method chaining.
|
+
+#### [setValue](#setvalue)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt:setValue(value) -> cp.apple.finalcutpro.export.GoToPrompt` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the value of the text box within the Go To Prompt. |
+| **Parameters** | - value - The value of the text box as a string.
|
+| **Returns** | - The
cp.apple.finalcutpro.export.GoToPrompt object for method chaining.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt:show() -> cp.apple.finalcutpro.export.GoToPrompt` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Go To Prompt |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.export.GoToPrompt object for method chaining.
|
+
+#### [value](#value)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt:value([newValue]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the current path value, or `nil`. |
+| **Parameters** | - newValue - (optional) The new value for the path.
|
+| **Returns** | - The current value of the path.
|
+
+#### [valueField](#valuefield)
+| **Signature** | `cp.apple.finalcutpro.export.GoToPrompt:valueField() -> TextField | ComboField` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the 'Go To' prompt showing? |
+| **Type** | Method |
+| **Description** | Returns either the `valueText` or `valueCombo`, depending what is available on-screen. |
+| **Parameters** | |
+| **Returns** | - The
TextField or ComboField containing the value.
|
diff --git a/api/cp/cp.apple.finalcutpro.export.ReplaceAlert.md b/api/cp/cp.apple.finalcutpro.export.ReplaceAlert.md
index 643e69d..a33e6df 100644
--- a/api/cp/cp.apple.finalcutpro.export.ReplaceAlert.md
+++ b/api/cp/cp.apple.finalcutpro.export.ReplaceAlert.md
@@ -4,16 +4,42 @@
Replace Alert
## API Overview
-* Fields - Variables which can only be accessed from an object returned by a constructor
- * [isShowing](#isshowing)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ReplaceAlert](#replacealert)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [pressReplace](#pressreplace)
## API Documentation
-### Fields
+### Functions
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.export.ReplaceAlert.isShowing ` |
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.export.ReplaceAlert.matches(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Replace File alert showing? |
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [ReplaceAlert](#replacealert)
+| **Signature** | `cp.apple.finalcutpro.export.ReplaceAlert(app) -> ReplaceAlert` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Replace Alert object. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | - A new ReplaceAlert object.
|
+
+### Methods
+
+#### [pressReplace](#pressreplace)
+| **Signature** | `cp.apple.finalcutpro.export.ReplaceAlert:pressReplace() -> cp.apple.finalcutpro.export.ReplaceAlert` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the Replace button. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.export.ReplaceAlert object for method chaining.
|
diff --git a/api/cp/cp.apple.finalcutpro.export.SaveSheet.md b/api/cp/cp.apple.finalcutpro.export.SaveSheet.md
index bafad01..927547f 100644
--- a/api/cp/cp.apple.finalcutpro.export.SaveSheet.md
+++ b/api/cp/cp.apple.finalcutpro.export.SaveSheet.md
@@ -4,16 +4,77 @@
Save Sheet
## API Overview
-* Fields - Variables which can only be accessed from an object returned by a constructor
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
* [SaveSheet](#savesheet)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [cancel](#cancel)
+ * [filename](#filename)
+ * [goToPrompt](#gotoprompt)
+ * [replaceAlert](#replacealert)
+ * [save](#save)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [setPath](#setpath)
## API Documentation
-### Fields
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
#### [SaveSheet](#savesheet)
-| **Signature** | `cp.apple.finalcutpro.export.SaveSheet ` |
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet(app) -> SaveSheet` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new SaveSheet object. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | |
+
+### Fields
+
+#### [cancel](#cancel)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet.cancel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Cancel" `Button`. |
+
+#### [filename](#filename)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet.filename ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Save Sheet Filename Text Field. |
+
+#### [goToPrompt](#gotoprompt)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet.goToPrompt ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Go To Prompt object. |
+
+#### [replaceAlert](#replacealert)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet.replaceAlert ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Replace Alert object. |
+
+#### [save](#save)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet.save ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Save" `Button`. |
+
+### Methods
+
+#### [setPath](#setpath)
+| **Signature** | `cp.apple.finalcutpro.export.SaveSheet:setPath(path) -> cp.apple.finalcutpro.export.SaveSheet` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Save Sheet showing? |
+| **Type** | Method |
+| **Description** | Sets the path. |
+| **Parameters** | - path - The path as a string.
|
+| **Returns** | - The
cp.apple.finalcutpro.export.SaveSheet object for method chaining.
|
diff --git a/api/cp/cp.apple.finalcutpro.export.destinations.md b/api/cp/cp.apple.finalcutpro.export.destinations.md
index 3d204eb..f48b557 100644
--- a/api/cp/cp.apple.finalcutpro.export.destinations.md
+++ b/api/cp/cp.apple.finalcutpro.export.destinations.md
@@ -3,9 +3,59 @@
Provides access to the list of Share Destinations configured for the user.
+If...
+
+`~/Library/Preferences/com.apple.FinalCut.UserDestinations3.plist`
+
+...doesn't exist, then Final Cut Pro will use:
+
+`/Applications/Final Cut Pro.app/Contents/Resources/DefaultDestinations.plist`
+
+...followed by any 3rd party applications such as:
+
+`~/Library/Application Support/ProApps/Share Destinations/Vimeo (advanced).fcpxdest`
+`/Library/Application Support/ProApps/Share Destinations/Xsend Motion.fcpxdest`
+
+However, when you close Final Cut Pro, or if you open and close the destinations
+preferences window, a new file will be created:
+
+`~/Library/Preferences/com.apple.FinalCut.UserDestinations3.plist`
+
+Also, if, for example, you delete the Xsend Motion destination in the Final Cut Pro
+user interface, or rename the DVD preset to something else, then it will automatically
+create a new Preferences file:
+
+`~/Library/Preferences/com.apple.FinalCut.UserDestinations3.plist`
+
+It seems that as of FCPX 10.4.6, Final Cut Pro ignores the:
+
+`~/Preferences/com.apple.FinalCut.UserDestinations.plist`
+
+...file (it must be considered legacy). However, if this file exists:
+
+`~/Preferences/com.apple.FinalCut.UserDestinations2.plist`
+
+It will read that file, along with any third party applications such as:
+
+`~/Application Support/ProApps/Share Destinations/Vimeo (advanced).fcpxdest`
+`/Library/Application Support/ProApps/Share Destinations/Xsend Motion.fcpxdest`
+
+However, again, if you close Final Cut Pro, or open and close the destinations
+preferences window, a new file will be created, migrating the data from UserDestinations2:
+
+`~/Preferences/com.apple.FinalCut.UserDestinations3.plist`
+
+Long story short, in MOST cases, `UserDestinations3.plist` will be single source of
+destinations, however, if this file doesn't exist, then `UserDestinations2.plist`
+will be used, and if this file doesn't exist, then it will read the default values
+from `DefaultDestinations.plist`, along with any third party share destinations.
+
+Fun fact: even if you delete third party applications such as "Vimeo (advanced)",
+and "Xsend Motion" from your Final Cut Pro destinations preferences, they'll come
+back after you restart FCPX.
+
## API Overview
* Functions - API calls offered directly by the extension
- * [details](#details)
* [indexOf](#indexof)
* [names](#names)
@@ -13,27 +63,19 @@ Provides access to the list of Share Destinations configured for the user.
### Functions
-#### [details](#details)
-| **Signature** | `cp.apple.finalcutpro.export.destinations.details() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the full details of the current Share Destinations as a table. |
-| **Parameters** | |
-| **Returns** | - The table of Share Destinations.
|
-
#### [indexOf](#indexof)
| **Signature** | `cp.apple.finalcutpro.export.destinations.indexOf(name) -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the index of the Destination with the specified name, or `nil` if not found. |
-| **Parameters** | - `name` - The name of the Destination
|
-| **Returns** | - The index of the named Destination, or `nil`.
|
+| **Type** | Function |
+| **Description** | Returns the index of the Destination with the specified name, or `nil` if not found. |
+| **Parameters** | name - The name of the Destination
|
+| **Returns** | - The index of the named Destination, or
nil.
|
#### [names](#names)
-| **Signature** | `cp.apple.finalcutpro.export.destinations.names() -> table` |
+| **Signature** | `cp.apple.finalcutpro.export.destinations.names() -> table | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns an array of the names of destinations, in their current order. |
+| **Type** | Function |
+| **Description** | Returns an array of the names of destinations, in their current order. |
| **Parameters** | |
-| **Returns** | - The table of Share Destination names.
|
+| **Returns** | - The table of Share Destination names, or
nil if an error has occurred. - An error message as a string.
|
diff --git a/api/cp/cp.apple.finalcutpro.ids.md b/api/cp/cp.apple.finalcutpro.ids.md
deleted file mode 100644
index 8877950..0000000
--- a/api/cp/cp.apple.finalcutpro.ids.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.ids
----
-
-Final Cut Pro IDs.
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.finalcutpro.import.MediaImport.md b/api/cp/cp.apple.finalcutpro.import.MediaImport.md
index 7eeda92..7df0338 100644
--- a/api/cp/cp.apple.finalcutpro.import.MediaImport.md
+++ b/api/cp/cp.apple.finalcutpro.import.MediaImport.md
@@ -4,28 +4,68 @@
Media Import
## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [MediaImport](#mediaimport)
* Fields - Variables which can only be accessed from an object returned by a constructor
- * [isShowing](#isshowing)
+ * [importAll](#importall)
+ * [stopImport](#stopimport)
* Methods - API calls which can only be made on an object returned by a constructor
- * [watch](#watch)
+ * [hide](#hide)
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.import.MediaImport.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [MediaImport](#mediaimport)
+| **Signature** | `cp.apple.finalcutpro.import.MediaImport(app) -> MediaImport` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Media Import object. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | - A new MediaImport object.
|
+
### Fields
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.import.MediaImport.isShowing ` |
+#### [importAll](#importall)
+| **Signature** | `cp.apple.finalcutpro.import.MediaImport.importAll ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Import All button. |
+
+#### [stopImport](#stopimport)
+| **Signature** | `cp.apple.finalcutpro.import.MediaImport.stopImport ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Media Import window showing? |
+| **Type** | Field |
+| **Description** | The "Stop Import" button. |
### Methods
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.import.MediaImport:watch() -> bool` |
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.import.MediaImport:hide() -> cp.apple.finalcutpro.import.MediaImport` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Media Import window. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.import.MediaImport object for method chaining.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.import.MediaImport:show() -> cp.apple.finalcutpro.import.MediaImport` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the command editor. The optional functions will be called when the window is shown or hidden, respectively. |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `show(CommandEditor)` - Triggered when the window is shown.
- `hide(CommandEditor)` - Triggered when the window is hidden.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Shows the Media Import window. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.import.MediaImport object for method chaining.
|
diff --git a/api/cp/cp.apple.finalcutpro.inspector.BaseMotionPanel.md b/api/cp/cp.apple.finalcutpro.inspector.BaseMotionPanel.md
new file mode 100644
index 0000000..e00e808
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.BaseMotionPanel.md
@@ -0,0 +1,53 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.BaseMotionPanel
+---
+
+A base class for [Inspector](cp.apple.finalcutpro.inspector.Inspector.md) panels
+that publish Motion parameters.
+
+Extends [BasePanel](cp.apple.finalcutpro.inspector.BasePanel.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [BaseMotionPanel](#basemotionpanel)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contentUI](#contentui)
+ * [published](#published)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.BaseMotionPanel.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided element could be a BaseMotionPanel. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if it matches, false if not.
|
+
+### Constructors
+
+#### [BaseMotionPanel](#basemotionpanel)
+| **Signature** | `cp.apple.finalcutpro.inspector.BaseMotionPanel(parent, panelType) -> cp.apple.finalcutpro.inspector.BaseMotionPanel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `BaseMotionPanel` object |
+| **Parameters** | parent - The parentpanelType - The panel type.
|
+| **Returns** | |
+
+### Fields
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.BaseMotionPanel.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The primary content `axuielement` for the panel. |
+
+#### [published](#published)
+| **Signature** | `cp.apple.finalcutpro.inspector.BaseMotionPanel.published ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The 'Published Parameters' section. |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.BasePanel.md b/api/cp/cp.apple.finalcutpro.inspector.BasePanel.md
new file mode 100644
index 0000000..4c93a68
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.BasePanel.md
@@ -0,0 +1,61 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.BasePanel
+---
+
+A base class for the different panels in the [Inspector](cp.apple.finalcutpro.inspector.Inspector.md).
+
+Extends [Element](cp.ui.Element.md).
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [BasePanel](#basepanel)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [panelType](#paneltype)
+ * [show](#show)
+
+## API Documentation
+
+### Constructors
+
+#### [BasePanel](#basepanel)
+| **Signature** | `cp.apple.finalcutpro.inspector.BasePanel(parent, panelType) -> BasePanel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs the panel, initialising the parent and the [UI](cp.ui.Element.md#UI). |
+| **Parameters** | |
+| **Returns** | - The new
BasePanel instance.
|
+
+### Methods
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.BasePanel:doShow() -> cp.rx.go.Statment` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that hides the panel. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful and sending an error if not.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.inspector.BasePanel:hide() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the panel. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [panelType](#paneltype)
+| **Signature** | `cp.apple.finalcutpro.inspector.BasePanel:panelType() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the type of panel this is. |
+| **Returns** | - The panel type identifier.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.BasePanel:show() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the panel. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.Inspector.md b/api/cp/cp.apple.finalcutpro.inspector.Inspector.md
new file mode 100644
index 0000000..0ae472d
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.Inspector.md
@@ -0,0 +1,252 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.Inspector
+---
+
+Inspector
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [INSPECTOR_TABS](#inspector_tabs)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Inspector](#inspector)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [audio](#audio)
+ * [bottomBarUI](#bottombarui)
+ * [color](#color)
+ * [generator](#generator)
+ * [info](#info)
+ * [isFullHeight](#isfullheight)
+ * [isShowing](#isshowing)
+ * [labelUI](#labelui)
+ * [panelUI](#panelui)
+ * [projectInfo](#projectinfo)
+ * [propertiesUI](#propertiesui)
+ * [share](#share)
+ * [text](#text)
+ * [title](#title)
+ * [topBarUI](#topbarui)
+ * [transition](#transition)
+ * [video](#video)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doFindTabButton](#dofindtabbutton)
+ * [doHide](#dohide)
+ * [doSelectTab](#doselecttab)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [selectedTab](#selectedtab)
+ * [selectTab](#selecttab)
+ * [show](#show)
+ * [tabAvailable](#tabavailable)
+
+## API Documentation
+
+### Constants
+
+#### [INSPECTOR_TABS](#inspector_tabs)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.INSPECTOR_TABS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Table of supported Inspector Tabs |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - axuielementObject
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Inspector](#inspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector(parent) -> Inspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Inspector. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | |
+
+### Fields
+
+#### [audio](#audio)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.audio ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [AudioInspector](cp.apple.finalcutpro.inspector.AudioInspector.md). |
+
+#### [bottomBarUI](#bottombarui)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.bottomBarUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the bottom bar `axuielement` for the Inspector. |
+
+#### [color](#color)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.color ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [ColorInspector](cp.apple.finalcutpro.inspector.ColorInspector.md). |
+
+#### [generator](#generator)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.generator ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [GeneratorInspector](package.GeneratorInspector.md) |
+
+#### [info](#info)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.info ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [InfoInspector](cp.apple.finalcutpro.inspector.InfoInspector.md). |
+
+#### [isFullHeight](#isfullheight)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.isFullHeight ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if the Inspector is full height. |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if the Inspector is showing otherwise `false` |
+
+#### [labelUI](#labelui)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.labelUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` for text label at the top of the Inspector. |
+
+#### [panelUI](#panelui)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.panelUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the central panel `axuielement` for the Inspector. |
+
+#### [projectInfo](#projectinfo)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.projectInfo ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [InfoProjectInspector](cp.apple.finalcutpro.inspector.InfoProjectInspector.md). |
+
+#### [propertiesUI](#propertiesui)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.propertiesUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the properties `axuielement` for the Inspector. This contains the rows of property values. |
+
+#### [share](#share)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.share ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [ShareInspector](cp.apple.finalcutpro.inspector.ShareInspector.md). |
+
+#### [text](#text)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.text |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [TextzInspector](cp.apple.finalcutpro.inspector.TextzInspector.md). |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [TitleInspector](cp.apple.finalcutpro.inspector.TitleInspector.md). |
+
+#### [topBarUI](#topbarui)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.topBarUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the "top bar" `axuielement` for the Inspector. |
+
+#### [transition](#transition)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.transition ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [TransitionInspector](cp.apple.finalcutpro.inspector.TransitionInspector.md). |
+
+#### [video](#video)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector.video ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [VideoInspector](cp.apple.finalcutpro.inspector.VideoInspector.md). |
+
+### Methods
+
+#### [doFindTabButton](#dofindtabbutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:doFindTabButton(type) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the named Inspector tab button, or sends an error if the type is unsupported. |
+| **Parameters** | - type - the type of the button to return. (e.g. "Video")
|
+| **Returns** | |
+| **Notes** | - Valid strings for
type are as follows: - Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
- Not all button types are available in all contexts.
|
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to hide the `Inspector`. |
+| **Returns** | - The
Statement, resolving to true if the Inspector was hidden successfully, or an error if not.
|
+
+#### [doSelectTab](#doselecttab)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:doSelectTab(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A Statement that selects the specified tab title. |
+| **Parameters** | - title - The title of the tab to select.
|
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to show the `Inspector`. |
+| **Returns** | - The
Statement, resolving to true if the Inspector was shown successfully, or an error if not.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:hide() -> Inspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the inspector. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [selectedTab](#selectedtab)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:selectedTab() -> string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the name of the selected inspector tab otherwise `nil`. |
+| **Parameters** | |
+| **Returns** | - A string of the selected tab, otherwise
nil if the Inspector is closed or an error occurred.
|
+| **Notes** | - The tab strings can be:
- Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
+
+#### [selectTab](#selecttab)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:selectTab(tab) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects a tab in the inspector. |
+| **Parameters** | - tab - A string from the
cp.apple.finalcutpro.inspector.Inspector.INSPECTOR_TABS table
|
+| **Returns** | - A string of the selected tab, otherwise
nil if an error occurred.
|
+| **Notes** | - This method will open the Inspector if it's closed, and leave it open.
- Valid strings for
value are as follows: - Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:show([tab]) -> Inspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the inspector. |
+| **Parameters** | - [tab] - A string from the
cp.apple.finalcutpro.inspector.Inspector.INSPECTOR_TABS table
|
+| **Returns** | |
+| **Notes** | - Valid strings for
value are as follows: - Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
+
+#### [tabAvailable](#tabavailable)
+| **Signature** | `cp.apple.finalcutpro.inspector.Inspector:tabAvailable(tab) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks to see if a tab is currently available in the Inspector. |
+| **Parameters** | - tab - A string from the
cp.apple.finalcutpro.inspector.Inspector.INSPECTOR_TABS table
|
+| **Returns** | true if available otherwise false.
|
+| **Notes** | - Valid strings for
value are as follows: - Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.InspectorProperty.md b/api/cp/cp.apple.finalcutpro.inspector.InspectorProperty.md
new file mode 100644
index 0000000..e4c53b5
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.InspectorProperty.md
@@ -0,0 +1,116 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.InspectorProperty
+---
+
+`InspectorProperty` contains helper functions for handling common property
+types that occur in various `Inspectors` in FCP.
+
+In addition to specific property row types like `textField`, `slider`, etc.,
+there is also a `section`, which is for rows which expand/collapse to reveal
+other properties.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [checkBox](#checkbox)
+ * [hasProperties](#hasproperties)
+ * [menuButton](#menubutton)
+ * [numberField](#numberfield)
+ * [popUpButton](#popupbutton)
+ * [section](#section)
+ * [simple](#simple)
+ * [slider](#slider)
+ * [staticText](#statictext)
+ * [textField](#textfield)
+ * [xy](#xy)
+
+## API Documentation
+
+### Functions
+
+#### [checkBox](#checkbox)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.checkBox(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [hasProperties](#hasproperties)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.hasProperties(parent, uiFinder) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | This will prepare the `parent` to handle containing `PropertyRow` children, and returns |
+| **Parameters** | - parent - The parent table.
- uiFinder - The function or cp.prop which will be called to find the parent UI element. Functions will be passed the
parent when being executed.
|
+| **Returns** | |
+
+#### [menuButton](#menubutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.menuButton(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [numberField](#numberfield)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.numberField(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [popUpButton](#popupbutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.popUpButton(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [section](#section)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.section(labelKey[, index]) -> function` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a 'section row' factory function that can be called to create a section row that contains other `PropertyRow' `cp.prop`s. |
+| **Parameters** | - labelKey - The I18N lookup key to find the row with.
- index - (optional) The occurrence of the key value in the parent. Sometimes multiple rows have the same title. Defaults to
1.
|
+| **Returns** | - A function which will create the section row when called.
|
+
+#### [simple](#simple)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.simple(labelKey[, prepareFn][, index]]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- prepareFn - The function to call to perform additional preparations on the row.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [slider](#slider)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.slider(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [staticText](#statictext)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.staticText(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [textField](#textfield)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.textField(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
+#### [xy](#xy)
+| **Signature** | `cp.apple.finalcutpro.inspector.InspectorProperty.xy(labelKey[, index]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` that contains a `PropertyRow` matching the `labelKey`. |
+| **Parameters** | - labelKey - The I18N key that the row lable matches.
- index - The instance number of that label (defaults to
1).
|
+| **Returns** | - The
cp.prop that returns the PropertyRow.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.audio.AudioComponent.md b/api/cp/cp.apple.finalcutpro.inspector.audio.AudioComponent.md
new file mode 100644
index 0000000..17764ef
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.audio.AudioComponent.md
@@ -0,0 +1,84 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.audio.AudioComponent
+---
+
+The Audio Configuration section of the Audio Inspector.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [AudioComponent](#audiocomponent)
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [channels](#channels)
+ * [role](#role)
+ * [showAs](#showas)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doShow](#doshow)
+ * [enabled](#enabled)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [AudioComponent](#audiocomponent)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent(parent) -> AudioComponent` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new Audio Component object. |
+| **Parameters** | - parent - The parent object.
- subcomponent - A boolean that defines whether or not this is a subcomponent.
- componentType - "multicam", "compound" or "standard"
- index - The index of the component
|
+| **Returns** | - A new AudioComponent object.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Fields
+
+#### [channels](#channels)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent.channels ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The channels popup menu button for the component. This only present for |
+
+#### [role](#role)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent.role ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The role popup menu button for the subcomponent. Only present for |
+
+#### [showAs](#showas)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent.showAs ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The subroles popup menu button for the component. Only present for |
+
+### Methods
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A Statement that will attempt to show the bar. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will resolve to true if successful, or send an error if not.
|
+
+#### [enabled](#enabled)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent:enabled() -> Button` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the enable/disable button for the component. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioComponent:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to show the bar. |
+| **Parameters** | |
+| **Returns** | - The
AudioComponent instance.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.audio.AudioConfiguration.md b/api/cp/cp.apple.finalcutpro.inspector.audio.AudioConfiguration.md
new file mode 100644
index 0000000..1747d3e
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.audio.AudioConfiguration.md
@@ -0,0 +1,69 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.audio.AudioConfiguration
+---
+
+The Audio Configuration section of the Audio Inspector.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [AudioConfiguration](#audioconfiguration)
+ * [matches](#matches)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [component](#component)
+ * [doShow](#doshow)
+ * [show](#show)
+ * [subcomponent](#subcomponent)
+
+## API Documentation
+
+### Functions
+
+#### [AudioConfiguration](#audioconfiguration)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioConfiguration(parent) -> AudioConfiguration` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new Media Import object. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new AudioConfiguration object.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioConfiguration.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Methods
+
+#### [component](#component)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioConfiguration:component() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table of `AudioComponent` objects for all main audio components. |
+| **Parameters** | |
+| **Returns** | - A table containing
AudioComponent objects.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioConfiguration:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A Statement that will attempt to show the bar. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will resolve to true if successful, or send an error if not.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioConfiguration:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to show the bar. |
+| **Parameters** | |
+| **Returns** | - The
AudioConfiguration instance.
|
+
+#### [subcomponent](#subcomponent)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioConfiguration:subcomponent() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table of `AudioComponent` objects for all audio subcomponents. |
+| **Parameters** | |
+| **Returns** | - A table containing
AudioComponent objects.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.audio.AudioInspector.md b/api/cp/cp.apple.finalcutpro.inspector.audio.AudioInspector.md
new file mode 100644
index 0000000..66e983c
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.audio.AudioInspector.md
@@ -0,0 +1,99 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.audio.AudioInspector
+---
+
+Audio Inspector Module.
+
+Header Rows (`compositing`, `transform`, etc.) have the following properties:
+ * enabled - (cp.ui.CheckBox) Indicates if the section is enabled.
+ * toggle - (cp.ui.Button) Will toggle the Hide/Show button.
+ * reset - (cp.ui.Button) Will reset the contents of the section.
+ * expanded - (cp.prop ) Get/sets whether the section is expanded.
+
+Property Rows depend on the type of property:
+
+Menu Property:
+ * value - (cp.ui.PopUpButton) The current value of the property.
+
+Slider Property:
+ * value - (cp.ui.Slider) The current value of the property.
+
+XY Property:
+ * x - (cp.ui.TextField) The current 'X' value.
+ * y - (cp.ui.TextField) The current 'Y' value.
+
+CheckBox Property:
+ * value - (cp.ui.CheckBox) The currently value.
+
+For example:
+```lua
+local audio = fcp.inspector.audio
+-- Menu Property:
+audio:compositing():blendMode():value("Subtract")
+-- Slider Property:
+audio:compositing():opacity():value(50.0)
+-- XY Property:
+audio:transform():position():x(-10.0)
+-- CheckBox property:
+audio:stabilization():tripodMode():value(true)
+```
+
+You should also be able to show a specific property and it will be revealed:
+```lua
+audio:stabilization():smoothing():show():value(1.5)
+```
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [EQ_MODES](#eq_modes)
+ * [PAN_MODES](#pan_modes)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [AudioInspector](#audioinspector)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [audioConfiguration](#audioconfiguration)
+
+## API Documentation
+
+### Constants
+
+#### [EQ_MODES](#eq_modes)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioInspector.EQ_MODES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | EQ Modes |
+
+#### [PAN_MODES](#pan_modes)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioInspector.PAN_MODES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Pan Modes |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioInspector.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided element could be a AudioInspector. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if it matches, false if not.
|
+
+### Constructors
+
+#### [AudioInspector](#audioinspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioInspector(parent) -> cp.apple.finalcutpro.audio.AudioInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `AudioInspector` object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [audioConfiguration](#audioconfiguration)
+| **Signature** | `cp.apple.finalcutpro.inspector.audio.AudioInspector.audioConfiguration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `AudioConfiguration` instance. |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorBoard.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorBoard.md
new file mode 100644
index 0000000..23c3056
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorBoard.md
@@ -0,0 +1,207 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorBoard
+---
+
+Color Board Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [aspect](#aspect)
+* Variables - Configurable values
+ * [currentAspect](#currentaspect)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorBoard](#colorboard)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [aspectGroup](#aspectgroup)
+ * [color](#color)
+ * [contentUI](#contentui)
+ * [exposure](#exposure)
+ * [isActive](#isactive)
+ * [isShowing](#isshowing)
+ * [saturation](#saturation)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [childUI](#childui)
+ * [current](#current)
+ * [doHide](#dohide)
+ * [doNextAspect](#donextaspect)
+ * [doResetCurrent](#doresetcurrent)
+ * [doSelectAspect](#doselectaspect)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [nextAspect](#nextaspect)
+ * [reset](#reset)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [aspect](#aspect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.aspect -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A table containing tables of all the aspect panel settings |
+
+### Variables
+
+#### [currentAspect](#currentaspect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.currentAspect -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | The current aspect as a string. |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if a GUI element is the Color Board. |
+| **Parameters** | element - The element you want to check
|
+| **Returns** | true if the element is a Color Board otherwise false
|
+
+### Constructors
+
+#### [ColorBoard](#colorboard)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard(parent) -> ColorBoard object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new ColorBoard object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [aspectGroup](#aspectgroup)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.aspectGroup ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `RadioGroup` for the 'aspect' currently being controlled |
+
+#### [color](#color)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.color ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `color` aspect of the color board. |
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `hs._asm.axuielement` object for the Color Board's content. |
+
+#### [exposure](#exposure)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.exposure ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `exposure` aspect of the color board. |
+
+#### [isActive](#isactive)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:isActive ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns whether or not the Color Board is active |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns whether or not the Color Board is visible. |
+
+#### [saturation](#saturation)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard.saturation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `saturation` aspect of the color board. |
+
+### Methods
+
+#### [childUI](#childui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:childUI(id) -> hs._asm.axuielement object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the `hs._asm.axuielement` object for a child with the specified ID. |
+| **Parameters** | - axID -
AXIdentifier of the child
|
+| **Returns** | - An
hs._asm.axuielement object
|
+
+#### [current](#current)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:current() -> ColorBoardAspect` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the currently-selected 'aspect' of the Color Board - either the `color`, `saturation` or `exposure`. |
+| **Parameters** | |
+| **Returns** | - The currently active
ColorBoardAspect, or the color aspect if none is showing.
|
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that hides the Color Board. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will send a single true if successful, otherwise false, or an error being sent.
|
+
+#### [doNextAspect](#donextaspect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:doNextAspect() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that toggles the Color Board Panels between "Color", "Saturation" and "Exposure". |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doResetCurrent](#doresetcurrent)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:doResetCurrent([range]) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will reset the current 'active' aspect (e.g. `color`) in the Color Board. |
+| **Parameters** | - range - Optional range to reset in the current aspect.
|
+| **Returns** | - The
Statement, resolving with true if completed or an error if not.
|
+
+#### [doSelectAspect](#doselectaspect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:doSelectAspect(index) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to select the specified aspect `index`. |
+| **Parameters** | - index - The index to select.
|
+| **Returns** | - The
Statement, which will resolve to true if successful, or throw an error if not.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the Color Board. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will send a single true if successful, otherwise false, or an error being sent.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Color Board |
+| **Parameters** | |
+| **Returns** | |
+
+#### [nextAspect](#nextaspect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:nextAspect() -> ColorBoard object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Toggles the Color Board Panels between "Color", "Saturation" and "Exposure" |
+| **Parameters** | |
+| **Returns** | |
+
+#### [reset](#reset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:reset() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Resets the current aspect. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoard:show() -> ColorBoard object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Color Board |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorBoardAspect.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorBoardAspect.md
new file mode 100644
index 0000000..9e41c42
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorBoardAspect.md
@@ -0,0 +1,126 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorBoardAspect
+---
+
+Represents a particular aspect of the color board (Color/Saturation/Exposure).
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [ids](#ids)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorBoardAspect](#colorboardaspect)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [highlights](#highlights)
+ * [master](#master)
+ * [midtones](#midtones)
+ * [selected](#selected)
+ * [shadows](#shadows)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doShow](#doshow)
+ * [hasAngle](#hasangle)
+ * [id](#id)
+ * [index](#index)
+ * [reset](#reset)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [ids](#ids)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect.ids -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A table containing the list of aspect IDs ("color", "saturation", "exposure"). |
+
+### Constructors
+
+#### [ColorBoardAspect](#colorboardaspect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect(parent, index[, hasAngle]) -> ColorBoardAspect` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ColorBoardAspect` object. |
+| **Parameters** | - parent - The parent object.
- index - The Color Board Aspect Index.
- hasAngle - If
true, the aspect has an angle parameter. Defaults to false
|
+| **Returns** | - A new `ColorBoardAspect object.
|
+
+### Fields
+
+#### [highlights](#highlights)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect.highlights ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Highlights ColorPuck object. |
+
+#### [master](#master)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect.master ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Master ColorPuck object. |
+
+#### [midtones](#midtones)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect.midtones ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Midtones ColorPuck object. |
+
+#### [selected](#selected)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:selected() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the Color Board Aspect selected? |
+
+#### [shadows](#shadows)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect.shadows ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Shadows ColorPuck object. |
+
+### Methods
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows this Color Board Aspect. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful or throwing an error if not.
|
+
+#### [hasAngle](#hasangle)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:hasAngle() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the aspect has an `angle` property. |
+| **Parameters** | |
+| **Returns** | true if it has an angle propery.
|
+
+#### [id](#id)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:id() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the Color Board Aspect ID. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [index](#index)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:index() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the Color Board Aspect index. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [reset](#reset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:reset() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that resets all pucks in the the Color Board Aspect. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will resolve to true if sucessful, or throws an error if not.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorBoardAspect:show() -> cp.apple.finalcutpro.inspector.color.ColorBoardAspect` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Color Board Aspect |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.inspector.color.ColorBoardAspect object for method chaining.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorCurve.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorCurve.md
new file mode 100644
index 0000000..8a735c3
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorCurve.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorCurve
+---
+
+A ColorCurve [Element](cp.ui.Element.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorCurve](#colorcurve)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurve.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified value is a `ColorCurve`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches a ColorCurve element.
|
+
+### Constructors
+
+#### [ColorCurve](#colorcurve)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurve(parent, type) -> ColorCurve` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ColorCurve` [Element](cp.ui.Element.md). |
+| **Parameters** | - parent - The parent
Element. - type - The TYPE of curve.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorCurves.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorCurves.md
new file mode 100644
index 0000000..2ee9252
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorCurves.md
@@ -0,0 +1,141 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorCurves
+---
+
+Color Curves Module.
+
+Requires Final Cut Pro 10.4 or later.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorCurves](#colorcurves)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [blue](#blue)
+ * [contentUI](#contentui)
+ * [green](#green)
+ * [luma](#luma)
+ * [mix](#mix)
+ * [mixRow](#mixrow)
+ * [mixSlider](#mixslider)
+ * [preserveLuma](#preserveluma)
+ * [preserveLumaRow](#preservelumarow)
+ * [red](#red)
+ * [viewingAllCurves](#viewingallcurves)
+ * [viewModeButton](#viewmodebutton)
+ * [wheelType](#wheeltype)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified element is the Color Curves element. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is the Color Curves.
|
+
+### Constructors
+
+#### [ColorCurves](#colorcurves)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves(parent) -> ColorCurves object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new ColorCurves object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [blue](#blue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.blue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [ColorCurve](cp.apple.finalcutpro.inspector.color.ColorCurve.md) |
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` representing the content element of the ColorCurves corrector. |
+
+#### [green](#green)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.green ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [ColorCurve](cp.apple.finalcutpro.inspector.color.ColorCurve.md) |
+
+#### [luma](#luma)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.luma ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [ColorCurve](cp.apple.finalcutpro.inspector.color.ColorCurve.md) |
+
+#### [mix](#mix)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.mix ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The mix amount for this corrector. A number ranging from `0` to `1`. |
+
+#### [mixRow](#mixrow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.mixRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `PropertyRow` that provides access to the 'Mix' parameter, and `axuielement` |
+
+#### [mixSlider](#mixslider)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.mixSlider ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `Slider` that provides access to the 'Mix' slider. |
+
+#### [preserveLuma](#preserveluma)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.preserveLuma ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a [CheckBox](cp.ui.CheckBox.md) that provides access to the 'Preserve Luma' slider. |
+
+#### [preserveLumaRow](#preservelumarow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.preserveLumaRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `PropertyRow` that provides access to the 'Preserve Luma' parameter, and `axuielement` |
+
+#### [red](#red)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.red ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [ColorCurve](cp.apple.finalcutpro.inspector.color.ColorCurve.md) |
+
+#### [viewingAllCurves](#viewingallcurves)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.viewingAllCurves ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Reports and modifies whether the corrector is showing "All Curves" (`true`) or "Single Curves" (`false`). |
+
+#### [viewModeButton](#viewmodebutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.viewModeButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the [MenuButton](cp.ui.MenuButton.md) for the View Mode. |
+
+#### [wheelType](#wheeltype)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves.wheelType ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `RadioGroup` that allows selection of the curve type. Only available when |
+
+### Methods
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorCurves:show() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the Color Board within the Color Inspector. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorInspector.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorInspector.md
new file mode 100644
index 0000000..e5e87c6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorInspector.md
@@ -0,0 +1,165 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorInspector
+---
+
+Color Inspector Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [CORRECTION_TYPES](#correction_types)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [colorBoard](#colorboard)
+ * [colorCurves](#colorcurves)
+ * [colorWheels](#colorwheels)
+ * [corrections](#corrections)
+ * [correctorUI](#correctorui)
+ * [hueSaturationCurves](#huesaturationcurves)
+ * [topBarUI](#topbarui)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [activateCorrection](#activatecorrection)
+ * [addCorrection](#addcorrection)
+ * [ColorInspector](#colorinspector)
+ * [doActivateCorrection](#doactivatecorrection)
+ * [doAddCorrection](#doaddcorrection)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [CORRECTION_TYPES](#correction_types)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.CORRECTION_TYPES` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Table of Correction Types: |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified element is the Color Inspector element. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is the Color Inspector.
|
+
+### Fields
+
+#### [colorBoard](#colorboard)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.colorBoard ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The ColorBoard object. |
+
+#### [colorCurves](#colorcurves)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.colorCurves ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The ColorCurves object. |
+
+#### [colorWheels](#colorwheels)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.colorWheels ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The ColorWheels object. |
+
+#### [corrections](#corrections)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.corrections ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CorrectionsBar` instance representing the available corrections, |
+
+#### [correctorUI](#correctorui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.correctorUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `hs._asm.axuielement` object representing the currently-selected corrector panel. |
+
+#### [hueSaturationCurves](#huesaturationcurves)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.hueSaturationCurves ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The HueSaturationCurves object. |
+
+#### [topBarUI](#topbarui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.topBarUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `hs._asm.axuielement` object representing the top bar. |
+
+#### [value](#value)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the Color Well Value as a `cp.drawing.color`. |
+
+### Methods
+
+#### [activateCorrection](#activatecorrection)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:activateCorrection(correctionType[, number]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Activates the named correction type and number, if present. If no corrector with the type/number combination exists, a new one is added. |
+| **Parameters** | - correctionType - The string for the type of correction (in English). E.g. "Color Wheels", "Color Board", etc.
- number - The correction number for that type. Defaults to
1.
|
+| **Returns** | |
+
+#### [addCorrection](#addcorrection)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:addCorrection(correctionType) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds the named correction type. |
+| **Parameters** | - correctionType - The string for the type of correction (in English). E.g. "Color Wheels", "Color Board", etc.
|
+| **Returns** | |
+
+#### [ColorInspector](#colorinspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector(parent) -> ColorInspector object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new ColorInspector object |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doActivateCorrection](#doactivatecorrection)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:doActivateCorrection(correctionType[, number]) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that activates the named correction type and number, if present. |
+| **Parameters** | - correctionType - The string for the type of correction (in English). E.g. "Color Wheels", "Color Board", etc.
- number - The correction number for that type. Defaults to
1.
|
+| **Returns** | - The
Statement, which sends a single true value if successful, or sends an error if not.
|
+
+#### [doAddCorrection](#doaddcorrection)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:doAddCorrection(correctionType) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that adds the named correction type. |
+| **Parameters** | - correctionType - The string for the type of correction (in English). E.g. "Color Wheels", "Color Board", etc.
|
+| **Returns** | - The
Statement, resolving to true if successful, or sending an error if not.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to show the Color Inspector. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful or sending an error if not.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:hide() -> ColorInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Color Inspector |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorInspector:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Color Inspector. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorPuck.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorPuck.md
new file mode 100644
index 0000000..3a4b8a6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorPuck.md
@@ -0,0 +1,294 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorPuck
+---
+
+Color ColorPuck Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [DEFAULT_ANGLES](#default_angles)
+ * [ELASTICITY](#elasticity)
+ * [NATURAL_LENGTH](#natural_length)
+ * [RANGE](#range)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorPuck](#colorpuck)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [angle](#angle)
+ * [label](#label)
+ * [percent](#percent)
+ * [row](#row)
+ * [skimming](#skimming)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [accumulate](#accumulate)
+ * [cleanup](#cleanup)
+ * [colorMarker](#colormarker)
+ * [contentUI](#contentui)
+ * [doReset](#doreset)
+ * [doSelect](#doselect)
+ * [doShiftPercent](#doshiftpercent)
+ * [doShow](#doshow)
+ * [drawMarker](#drawmarker)
+ * [getArc](#getarc)
+ * [getBrightness](#getbrightness)
+ * [hasAngle](#hasangle)
+ * [index](#index)
+ * [loop](#loop)
+ * [reset](#reset)
+ * [select](#select)
+ * [shiftAngle](#shiftangle)
+ * [shiftPercent](#shiftpercent)
+ * [show](#show)
+ * [start](#start)
+ * [stop](#stop)
+
+## API Documentation
+
+### Constants
+
+#### [DEFAULT_ANGLES](#default_angles)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.DEFAULT_ANGLES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The table of default angles for the various pucks (1-4). |
+
+#### [ELASTICITY](#elasticity)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.ELASTICITY -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Elasticity as number. |
+
+#### [NATURAL_LENGTH](#natural_length)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.NATURAL_LENGTH -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Natural Length as number. |
+
+#### [RANGE](#range)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.RANGE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Table of puck ranges. |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [ColorPuck](#colorpuck)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck(parent, puckNumber, labelKeys, hasAngle) -> ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ColorPuck` object |
+| **Parameters** | parent - The parentpuckNumber - The puck numberlabelKeys - Label KeyshasAngle - If true, the puck has an angle parameter.
|
+| **Returns** | |
+
+### Fields
+
+#### [angle](#angle)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.angle ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The 'angle' text field (only present for the 'color' aspect). |
+
+#### [label](#label)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.label ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The human-readable label for the puck, in FCPX's current language. |
+
+#### [percent](#percent)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.percent ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The 'percent' text field. |
+
+#### [row](#row)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.row ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Finds the 'row' for the property type. |
+
+#### [skimming](#skimming)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck.skimming ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Skimming Preferences value. |
+
+### Methods
+
+#### [accumulate](#accumulate)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:accumulate() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Accumulate's the Shift Values. |
+| **Parameters** | xShift - x value as numberyShift - y value as number
|
+| **Returns** | x - Accumulated x value as numbery - Accumulated y value as number
|
+
+#### [cleanup](#cleanup)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:cleanup() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Cleans up the Color ColorPuck drawings. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [colorMarker](#colormarker)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:colorMarker(pct, angle) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Draws a Color Marker. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:contentUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the Content Accessibility Object |
+| **Parameters** | |
+| **Returns** | - An
axuielementObject or nil
|
+
+#### [doReset](#doreset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:doReset() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that resets the puck to its default settings. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful, or throwing an error if not.
|
+
+#### [doSelect](#doselect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:doSelect() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that selects this puck. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful or throwing an error if no.
|
+
+#### [doShiftPercent](#doshiftpercent)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:doShiftPercent(amount) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shifts the percent value by the provide amount. |
+| **Parameters** | amount - The amount to shift the percent value.
|
+| **Returns** | - The
Statement, resolving to the updated percent value, or throwing an error if there is a problem.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the Color ColorPuck. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful or sending an error if not.
|
+
+#### [drawMarker](#drawmarker)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:drawMarker() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Draws a marker. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getArc](#getarc)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:getArc() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the arc value. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getBrightness](#getbrightness)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:getBrightness() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the brightness value. |
+| **Parameters** | |
+| **Returns** | - The brightness value as number.
|
+
+#### [hasAngle](#hasangle)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:hasAngle() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates if the puck has an `angle` parameter. The `angle` `cp.prop` will always |
+| **Parameters** | |
+| **Returns** | true if the puck has an angle.
|
+
+#### [index](#index)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:index() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the puck number (1 through 4). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [loop](#loop)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:loop() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loops the Color ColorPuck function. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [reset](#reset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:reset() -> cp.apple.finalcutpro.inspector.color.ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Resets the puck to its default settings. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [select](#select)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:select() -> cp.apple.finalcutpro.inspector.color.ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects this puck. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [shiftAngle](#shiftangle)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:shiftAngle(amount) -> cp.apple.finalcutpro.inspector.color.ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shifts the angle value by the provide amount. |
+| **Parameters** | - amount - The amount to shift the angle value.
|
+| **Returns** | |
+
+#### [shiftPercent](#shiftpercent)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:shiftPercent(amount) -> cp.apple.finalcutpro.inspector.color.ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shifts the percent value by the provide amount. |
+| **Parameters** | amount - The amount to shift the percent value.
|
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:show() -> cp.apple.finalcutpro.inspector.color.ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Color ColorPuck |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.inspector.color.ColorPuck object for method chaining.
|
+
+#### [start](#start)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:start() -> cp.apple.finalcutpro.inspector.color.ColorPuck` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Starts a Color ColorPuck. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [stop](#stop)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorPuck:stop() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Stops a Color ColorPuck. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorWell.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorWell.md
new file mode 100644
index 0000000..0f9d214
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorWell.md
@@ -0,0 +1,111 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorWell
+---
+
+Represents a single Color Well in the Color Wheels Inspector.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [KEY_PRESS](#key_press)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorWell](#colorwell)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [center](#center)
+ * [colorOrientation](#colororientation)
+ * [colorPosition](#colorposition)
+ * [focused](#focused)
+ * [puckPosition](#puckposition)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [nudge](#nudge)
+ * [reset](#reset)
+ * [select](#select)
+
+## API Documentation
+
+### Constants
+
+#### [KEY_PRESS](#key_press)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.KEY_PRESS` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | This can be used with `nudge` to shift by the same distance |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified element is a Color Well. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is a Color Well.
|
+
+### Constructors
+
+#### [ColorWell](#colorwell)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell(parent, uiFinder[, hueShift]) -> ColorWell` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ColorWell` instance, with the specified parent and finder function. |
+| **Parameters** | - parent - The parent object
- uiFinder - Returns the
axuielement that represents the color well. - hueShift - The amount to shift the hue.
|
+| **Returns** | - A new
ColorWell instance.
|
+
+### Fields
+
+#### [center](#center)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.center ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The center point of the ColorWell. A table with `{x=..., y=...}`. |
+
+#### [colorOrientation](#colororientation)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.colorOrientation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the orientation of the color as a table containing an `up` and `right` value. |
+
+#### [colorPosition](#colorposition)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.colorPosition ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | X/Y screen position for the current color value of the Color Well. This ignores the bounds of the |
+
+#### [focused](#focused)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.focused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets and sets whether the Color Well has focus. |
+
+#### [puckPosition](#puckposition)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell.puckPosition ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Absolute X/Y screen position for the puck in the Color Well. Colours outside the bounds are clamped inside the color well. |
+
+### Methods
+
+#### [nudge](#nudge)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell:nudge(right, up) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that nudges the `colorPosition` by `right`/`up` values. |
+| **Parameters** | right - The number of steps to shift right. May be negative to shift left.up - The number of pixels to shift down. May be negative to shift down.
|
+| **Returns** | |
+
+#### [reset](#reset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell:reset() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Resets the color wheel. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [select](#select)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWell:select() -> cp.apple.finalcutpro.inspector.color.ColorWell` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects this color well. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorWheel.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorWheel.md
new file mode 100644
index 0000000..71cb941
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorWheel.md
@@ -0,0 +1,183 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorWheel
+---
+
+Represents a single Color Well in the Color Wheels Inspector.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [TYPE](#type)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorWheel](#colorwheel)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [brightnessValue](#brightnessvalue)
+ * [colorOrientation](#colororientation)
+ * [colorPosition](#colorposition)
+ * [colorValue](#colorvalue)
+ * [focused](#focused)
+ * [puckPosition](#puckposition)
+ * [reset](#reset)
+ * [saturationValue](#saturationvalue)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [brightness](#brightness)
+ * [colorWell](#colorwell)
+ * [doNudgeColor](#donudgecolor)
+ * [doSelect](#doselect)
+ * [doShow](#doshow)
+ * [nudgeColor](#nudgecolor)
+ * [saturation](#saturation)
+ * [select](#select)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [TYPE](#type)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.TYPE` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The possible types of ColorWheels: MASTER, SHADOWS, MIDTONES, HIGHLIGHTS. |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified element is a Color Well. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is a Color Well.
|
+
+### Constructors
+
+#### [ColorWheel](#colorwheel)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel(parent, type) -> ColorWheel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ColorWheel` instance, with the specified parent and type. |
+| **Parameters** | - parent - The parent object.
- type - The type of color wheel. Must be one of the
ColorWheel.TYPE values.
|
+| **Returns** | - A new
ColorWheel instance.
|
+
+### Fields
+
+#### [brightnessValue](#brightnessvalue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.brightnessValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current brightness value, as a number between -12 and 10. |
+
+#### [colorOrientation](#colororientation)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.colorOrientation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the orientation of the color as a table containing an `up` and `right` value. |
+
+#### [colorPosition](#colorposition)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.colorPosition ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | X/Y screen position for the current color value of the Color Well. This ignores the bounds of the |
+
+#### [colorValue](#colorvalue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.colorValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current color value, as a `hs.drawing.color` table. |
+
+#### [focused](#focused)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.focused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets and sets whether the Color Well has focus. |
+
+#### [puckPosition](#puckposition)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.puckPosition ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Absolute X/Y screen position for the puck in the Color Well. Colours outside the bounds are clamped inside the color well. |
+
+#### [reset](#reset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.reset ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Button](cp.ui.Button.md) that resets the color wheel values, if the `ColorWheel` is showing. |
+
+#### [saturationValue](#saturationvalue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.saturationValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current saturation value, as a number between 0 and 10. |
+
+### Methods
+
+#### [brightness](#brightness)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.brightness ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the brightness `ValueIndicator` for this ColorWheel. |
+| **Parameters** | |
+| **Returns** | - The brightness
ValueIndicator instance.
|
+
+#### [colorWell](#colorwell)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.colorWell ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `ColorWell` for this ColorWheel. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doNudgeColor](#donudgecolor)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel:doNudgeColor(right, up) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that nudges the `colorPosition` by `right`/`up` values. |
+| **Parameters** | right - The number of steps to shift right. May be negative to shift left.up - The number of pixels to shift down. May be negative to shift down.
|
+| **Returns** | - The
Statement, resolving to true if successful.
|
+
+#### [doSelect](#doselect)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel:doSelect() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to select this `ColorWheel`. |
+| **Returns** | - The
Statement, resolving to true if selected, otherwise false.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to show the `ColorWheel`. |
+| **Returns** | - The
Statement, resolving to true if shown, false if not.
|
+
+#### [nudgeColor](#nudgecolor)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel:nudgeColor(right, up) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Nudges the `colorPosition` by `right`/`up` values. Negative `right` values shift left, |
+| **Parameters** | right - The number of steps to shift right. May be negative to shift left.up - The number of pixels to shift down. May be negative to shift down.
|
+| **Returns** | |
+
+#### [saturation](#saturation)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel.saturation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the saturation `ValueIndicator` for this ColorWheel. |
+| **Parameters** | |
+| **Returns** | - The saturation
ValueIndicator instance.
|
+
+#### [select](#select)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel:select() -> cp.apple.finalcutpro.inspector.color.ColorWheel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows and selects this color wheel. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheel:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the `ColorWheel`, if possible. |
+| **Returns** | - The same
ColorWheel instance, for chaining.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ColorWheels.md b/api/cp/cp.apple.finalcutpro.inspector.color.ColorWheels.md
new file mode 100644
index 0000000..558d259
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ColorWheels.md
@@ -0,0 +1,248 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ColorWheels
+---
+
+Color Wheels Module.
+
+Extends [Element](cp.ui.Element.md)
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorWheels](#colorwheels)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contentUI](#contentui)
+ * [highlights](#highlights)
+ * [hue](#hue)
+ * [hueRow](#huerow)
+ * [hueSlider](#hueslider)
+ * [hueTextField](#huetextfield)
+ * [master](#master)
+ * [maxValue](#maxvalue)
+ * [midtones](#midtones)
+ * [minValue](#minvalue)
+ * [mix](#mix)
+ * [mixRow](#mixrow)
+ * [mixSlider](#mixslider)
+ * [mixTextField](#mixtextfield)
+ * [shadows](#shadows)
+ * [temperature](#temperature)
+ * [temperatureRow](#temperaturerow)
+ * [temperatureSlider](#temperatureslider)
+ * [temperatureTextField](#temperaturetextfield)
+ * [tint](#tint)
+ * [tintRow](#tintrow)
+ * [tintSlider](#tintslider)
+ * [tintTextField](#tinttextfield)
+ * [value](#value)
+ * [viewingAllWheels](#viewingallwheels)
+ * [viewMode](#viewmode)
+ * [wheelType](#wheeltype)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doShow](#doshow)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified element is the Color Wheels element. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is the Color Wheels.
|
+
+### Constructors
+
+#### [ColorWheels](#colorwheels)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels(parent) -> ColorInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new ColorWheels object |
+| **Parameters** | |
+| **Returns** | - A new
ColorInspector object
|
+
+### Fields
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` representing the content element of the ColorWheels corrector. |
+
+#### [highlights](#highlights)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.highlights ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `ColorWheel` that allows control of the 'highlights' color settings. |
+
+#### [hue](#hue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.hue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The hue for the corrector. A number from `0` to `360`. |
+
+#### [hueRow](#huerow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.hueRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `PropertyRow` that provides access to the 'Hue' parameter, and `axuielement` |
+
+#### [hueSlider](#hueslider)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.hueSlider ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a `Slider` that provides access to the 'Hue' slider. |
+
+#### [hueTextField](#huetextfield)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.hueTextField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `TextField` that provides access to the 'Hue' slider. |
+
+#### [master](#master)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.master ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `ColorWheel` that allows control of the 'master' color settings. |
+
+#### [maxValue](#maxvalue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.maxValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The maximum value of the indicator as a number. |
+
+#### [midtones](#midtones)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.midtones ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `ColorWheel` that allows control of the 'midtones' color settings. |
+
+#### [minValue](#minvalue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.minValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The minimum value of the indicator as a number. |
+
+#### [mix](#mix)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.mix ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The mix amount for this corrector. A number ranging from `0` to `1`. |
+
+#### [mixRow](#mixrow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.mixRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `PropertyRow` that provides access to the 'Mix' parameter, and `axuielement` |
+
+#### [mixSlider](#mixslider)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.mixSlider ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `Slider` that provides access to the 'Mix' slider. |
+
+#### [mixTextField](#mixtextfield)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.mixTextField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `TextField` that provides access to the 'Mix' slider. |
+
+#### [shadows](#shadows)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.shadows ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `ColorWheel` that allows control of the 'shadows' color settings. |
+
+#### [temperature](#temperature)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.temperature ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The color temperature for this corrector. A number from 2500 to 10000. |
+
+#### [temperatureRow](#temperaturerow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.temperatureRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `PropertyRow` that provides access to the 'Temperatures' parameter, and `axuielement` |
+
+#### [temperatureSlider](#temperatureslider)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.temperatureSlider ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `Slider` that provides access to the 'Temperatures' slider. |
+
+#### [temperatureTextField](#temperaturetextfield)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.temperatureTextField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `TextField` that provides access to the 'Temperature' slider. |
+
+#### [tint](#tint)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.tint ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The tint for the corrector. A number from `-50` to `50`. |
+
+#### [tintRow](#tintrow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.tintRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `PropertyRow` that provides access to the 'Tint' parameter, and `axuielement` |
+
+#### [tintSlider](#tintslider)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.tintSlider ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a `Slider` that provides access to the 'Tint' slider. |
+
+#### [tintTextField](#tinttextfield)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.tintTextField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `TextField` that provides access to the 'Tint' slider. |
+
+#### [value](#value)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The value of the value indicator as a number. |
+
+#### [viewingAllWheels](#viewingallwheels)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.viewingAllWheels ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Reports and modifies whether the ColorWheels corrector is showing "All Wheels" (`true`) or "Single Wheels" (`false`). |
+
+#### [viewMode](#viewmode)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.viewMode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [MenuButton](cp.ui.MenuButton.md) for the View Mode. |
+
+#### [wheelType](#wheeltype)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels.wheelType ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `RadioGroup` that allows selection of the wheel type. Only available when |
+
+### Methods
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels:doShow() -> cs.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the Color Board within the Color Inspector. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successfully shown.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ColorWheels:show() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the Color Board within the Color Inspector. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.CorrectionsBar.md b/api/cp/cp.apple.finalcutpro.inspector.color.CorrectionsBar.md
new file mode 100644
index 0000000..b75c233
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.CorrectionsBar.md
@@ -0,0 +1,106 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.CorrectionsBar
+---
+
+The Correction selection/management bar at the top of the ColorInspector
+
+Requires Final Cut Pro 10.4 or later.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [CorrectionsBar](#correctionsbar)
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [correction](#correction)
+ * [menuButton](#menubutton)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [activate](#activate)
+ * [add](#add)
+ * [doActivate](#doactivate)
+ * [doShow](#doshow)
+ * [findCorrectionLabel](#findcorrectionlabel)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [CorrectionsBar](#correctionsbar)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar(parent) -> CorrectionsBar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new Media Import object. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new CorrectionsBar object.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Fields
+
+#### [correction](#correction)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar.correction ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `MenuButton` that lists the current correction. |
+
+#### [menuButton](#menubutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar.menuButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The menu button. |
+
+### Methods
+
+#### [activate](#activate)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar:activate(correctionType, number) -> cp.apple.finalcutpro.inspector.color.CorrectionsBar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Activates a correction type. |
+| **Parameters** | correctionType - The correction type as string.number - The number of the correction.
|
+| **Returns** | cp.apple.finalcutpro.inspector.color.CorrectionsBar object.
|
+
+#### [add](#add)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar:add(correctionType) -> cp.apple.finalcutpro.inspector.color.CorrectionsBar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds the specific correction type. |
+| **Parameters** | correctionType - The correction type as string.
|
+| **Returns** | cp.apple.finalcutpro.inspector.color.CorrectionsBar object.
|
+
+#### [doActivate](#doactivate)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar:doActivate(correctionType, number) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A Statement that activates a correction type. |
+| **Parameters** | correctionType - The correction type as string.number - The number of the correction.
|
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A Statement that will attempt to show the bar. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which will resolve to true if successful, or send an error if not.
|
+
+#### [findCorrectionLabel](#findcorrectionlabel)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar:findCorrectionLabel(correctionType) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns Correction Label. |
+| **Parameters** | - correctionType - The correction type as string.
|
+| **Returns** | - The correction label as string.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.CorrectionsBar:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to show the bar. |
+| **Parameters** | |
+| **Returns** | - The
CorrectionsBar instance.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md b/api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md
new file mode 100644
index 0000000..5ebc0d6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.HueSaturationCurve
+---
+
+A HueSaturationCurve [Element](cp.ui.Element.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [HueSaturationCurve](#huesaturationcurve)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurve.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified value is a `HueSaturationCurve`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches a HueSaturationCurve element.
|
+
+### Constructors
+
+#### [HueSaturationCurve](#huesaturationcurve)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurve(parent, type) -> HueSaturationCurve` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `HueSaturationCurve` [Element](cp.ui.Element.md). |
+| **Parameters** | - parent - The parent
Element. - type - The TYPE of curve.
|
+| **Returns** | - The new
HueSaturationCurve.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurves.md b/api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurves.md
new file mode 100644
index 0000000..c424451
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.HueSaturationCurves.md
@@ -0,0 +1,141 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.HueSaturationCurves
+---
+
+Color Curves Module.
+
+Requires Final Cut Pro 10.4 or later.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [HueSaturationCurves](#huesaturationcurves)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [colorVsSat](#colorvssat)
+ * [contentUI](#contentui)
+ * [hueVsHue](#huevshue)
+ * [hueVsLuma](#huevsluma)
+ * [hueVsSat](#huevssat)
+ * [lumaVsSat](#lumavssat)
+ * [mix](#mix)
+ * [mixRow](#mixrow)
+ * [mixSlider](#mixslider)
+ * [satVsSat](#satvssat)
+ * [viewingAllCurves](#viewingallcurves)
+ * [viewModeButton](#viewmodebutton)
+ * [wheelType](#wheeltype)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the specified element is the Color Curves element. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is the Color Curves.
|
+
+### Constructors
+
+#### [HueSaturationCurves](#huesaturationcurves)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves(parent) -> HueSaturationCurves object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new HueSaturationCurves object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [colorVsSat](#colorvssat)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.colorVsSat ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [HueSaturationCurve](cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md) |
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` representing the content element of the HueSaturationCurves corrector. |
+
+#### [hueVsHue](#huevshue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.hueVsHue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [HueSaturationCurve](cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md) |
+
+#### [hueVsLuma](#huevsluma)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.hueVsLuma ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [HueSaturationCurve](cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md) |
+
+#### [hueVsSat](#huevssat)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.hueVsSat ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [HueSaturationCurve](cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md) |
+
+#### [lumaVsSat](#lumavssat)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.lumaVsSat ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [HueSaturationCurve](cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md) |
+
+#### [mix](#mix)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.mix ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The mix amount for this corrector. A number ranging from `0` to `1`. |
+
+#### [mixRow](#mixrow)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.mixRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `PropertyRow` that provides access to the 'Mix' parameter, and `axuielement` |
+
+#### [mixSlider](#mixslider)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.mixSlider ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `Slider` that provides access to the 'Mix' slider. |
+
+#### [satVsSat](#satvssat)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.satVsSat ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [HueSaturationCurve](cp.apple.finalcutpro.inspector.color.HueSaturationCurve.md) |
+
+#### [viewingAllCurves](#viewingallcurves)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.viewingAllCurves ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Reports and modifies whether the corrector is showing "All Curves" (`true`) or "Single Curves" (`false`). |
+
+#### [viewModeButton](#viewmodebutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.viewModeButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [MenuButton](cp.ui.MenuButton.md) for the View Mode. |
+
+#### [wheelType](#wheeltype)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves.wheelType ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `RadioGroup` that allows selection of the curve type. Only available when |
+
+### Methods
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.HueSaturationCurves:show() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the Color Board within the Color Inspector. |
+| **Parameters** | |
+| **Returns** | - HueSaturationCurves object
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.color.ValueIndicator.md b/api/cp/cp.apple.finalcutpro.inspector.color.ValueIndicator.md
new file mode 100644
index 0000000..29fbba1
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.color.ValueIndicator.md
@@ -0,0 +1,90 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.color.ValueIndicator
+---
+
+ValueIndicator Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ValueIndicator](#valueindicator)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [decrement](#decrement)
+ * [increment](#increment)
+ * [isShowing](#isshowing)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [shiftValue](#shiftvalue)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [ValueIndicator](#valueindicator)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator(parent, uiFinder, minValue, maxValue, toAXValueFn, fromAXValueFn) -> ValueIndicator` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new ValueIndicator. |
+| **Parameters** | parent - The parent table.uiFinder - The function which returns the axuielement.minValue - The minimum value allowed for the value.maxValue - The maximum value allowed for the value.toAXValueFn - The function which will convert the user value to the actual AXValue.fromAXValueFn - The function which will convert the current AXValue to a user value.
|
+| **Returns** | - New
ValueIndicator instance.
|
+
+### Methods
+
+#### [decrement](#decrement)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator:decrement() -> cp.apple.finalcutpro.inspector.color.ValueIndicator` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Decrements the value indicator. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.inspector.color.ValueIndicator object.
|
+
+#### [increment](#increment)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator:increment() -> cp.apple.finalcutpro.inspector.color.ValueIndicator` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Increments the value indicator. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro.inspector.color.ValueIndicator object.
|
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator:isShowing() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Is the Value Indicator currently showing? |
+| **Parameters** | |
+| **Returns** | true if showing, otherwise false
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a layout. |
+| **Parameters** | layout - The layout table you want to load.
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the layout. |
+| **Parameters** | |
+| **Returns** | - A table containing the layout.
|
+
+#### [shiftValue](#shiftvalue)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ValueIndicator:shiftValue(value) -> cp.apple.finalcutpro.inspector.color.ValueIndicator` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shifts the Value Indicator value. |
+| **Parameters** | value - The amount to shift the value indicator by as a number.
|
+| **Returns** | - The
cp.apple.finalcutpro.inspector.color.ValueIndicator object.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.generator.GeneratorInspector.md b/api/cp/cp.apple.finalcutpro.inspector.generator.GeneratorInspector.md
new file mode 100644
index 0000000..ecab63c
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.generator.GeneratorInspector.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.generator.GeneratorInspector
+---
+
+Generator Inspector Module. This appears for both Generators and Titles.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [GeneratorInspector](#generatorinspector)
+
+## API Documentation
+
+### Constructors
+
+#### [GeneratorInspector](#generatorinspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.generator.GeneratorInspector(parent) -> GeneratorInspector object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new GeneratorInspector object |
+| **Parameters** | |
+| **Returns** | - A GeneratorInspector object
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.info.InfoInspector.md b/api/cp/cp.apple.finalcutpro.inspector.info.InfoInspector.md
new file mode 100644
index 0000000..756faef
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.info.InfoInspector.md
@@ -0,0 +1,72 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.info.InfoInspector
+---
+
+Video Inspector Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [metadataViews](#metadataviews)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [metadataView](#metadataview)
+ * [metadataViewButton](#metadataviewbutton)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [propertiesUI](#propertiesui)
+
+## API Documentation
+
+### Constants
+
+#### [metadataViews](#metadataviews)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoInspector.metadataViews -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Metadata Views |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoInspector.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoInspector.new(parent) -> InfoInspector object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new InfoInspector object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [metadataView](#metadataview)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoInspector.metadataView ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the name of the current metadata view. |
+
+#### [metadataViewButton](#metadataviewbutton)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoInspector.metadataViewButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Info Inspector Metadata View Button. |
+
+### Methods
+
+#### [propertiesUI](#propertiesui)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoInspector:propertiesUI() -> hs._asm.axuielement object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `hs._asm.axuielement` object for the Properties UI. |
+| **Parameters** | |
+| **Returns** | - A
hs._asm.axuielement object.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.info.InfoProjectInspector.md b/api/cp/cp.apple.finalcutpro.inspector.info.InfoProjectInspector.md
new file mode 100644
index 0000000..dd38fd9
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.info.InfoProjectInspector.md
@@ -0,0 +1,64 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.info.InfoProjectInspector
+---
+
+Info Inspector Module when a Project is selected.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [modify](#modify)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doShow](#doshow)
+ * [propertiesUI](#propertiesui)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoProjectInspector.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoProjectInspector.new(parent) -> InfoProjectInspector object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new InfoProjectInspector object |
+| **Parameters** | |
+| **Returns** | - A InfoProjectInspector object
|
+
+### Fields
+
+#### [modify](#modify)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoProjectInspector.modify ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Modify Project button in the Info Inspector. |
+
+### Methods
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoProjectInspector:doShow() -> cp.rx.go.Statment` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the panel. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true if successful and sending an error if not.
|
+
+#### [propertiesUI](#propertiesui)
+| **Signature** | `cp.apple.finalcutpro.inspector.info.InfoProjectInspector:propertiesUI() -> hs._asm.axuielement object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `hs._asm.axuielement` object for the Properties UI. |
+| **Parameters** | |
+| **Returns** | - A
hs._asm.axuielement object.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.share.ShareInspector.md b/api/cp/cp.apple.finalcutpro.inspector.share.ShareInspector.md
new file mode 100644
index 0000000..1791bd5
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.share.ShareInspector.md
@@ -0,0 +1,72 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.share.ShareInspector
+---
+
+Share Inspector Module.
+
+Section Rows (`compositing`, `transform`, etc.) have the following properties:
+* enabled - (cp.ui.CheckBox) Indicates if the section is enabled.
+* toggle - (cp.ui.Button) Will toggle the Hide/Show button.
+* reset - (cp.ui.Button) Will reset the contents of the section.
+* expanded - (cp.prop ) Get/sets whether the section is expanded.
+
+Property Rows depend on the type of property:
+
+Menu Property:
+* value - (cp.ui.PopUpButton) The current value of the property.
+
+Slider Property:
+* value - (cp.ui.Slider) The current value of the property.
+
+XY Property:
+* x - (cp.ui.TextField) The current 'X' value.
+* y - (cp.ui.TextField) The current 'Y' value.
+
+CheckBox Property:
+* value - (cp.ui.CheckBox) The currently value.
+
+For example:
+```lua
+local share = fcp.inspector.share
+-- Menu Property:
+share:compositing():blendMode():value("Subtract")
+-- Slider Property:
+share:compositing():opacity():value(50.0)
+-- XY Property:
+share:transform():position():x(-10.0)
+-- CheckBox property:
+share:stabilization():tripodMode():value(true)
+```
+
+You should also be able to show a specific property and it will be revealed:
+```lua
+share:stabilization():smoothing():show():value(1.5)
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.share.ShareInspector.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided element could be a ShareInspector. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if it matches, false if not.
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.finalcutpro.inspector.share.ShareInspector.new(parent) -> cp.apple.finalcutpro.share.ShareInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ShareInspector` object |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.text.TextInspector.md b/api/cp/cp.apple.finalcutpro.inspector.text.TextInspector.md
new file mode 100644
index 0000000..c0091d9
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.text.TextInspector.md
@@ -0,0 +1,102 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.text.TextInspector
+---
+
+Text Inspector Module.
+
+Section Rows (`compositing`, `transform`, etc.) have the following properties:
+ * enabled - (cp.ui.CheckBox) Indicates if the section is enabled.
+ * toggle - (cp.ui.Button) Will toggle the Hide/Show button.
+ * reset - (cp.ui.Button) Will reset the contents of the section.
+ * expanded - (cp.prop ) Get/sets whether the section is expanded.
+
+Property Rows depend on the type of property:
+
+Menu Property:
+ * value - (cp.ui.PopUpButton) The current value of the property.
+
+Slider Property:
+ * value - (cp.ui.Slider) The current value of the property.
+
+XY Property:
+ * x - (cp.ui.TextField) The current 'X' value.
+ * y - (cp.ui.TextField) The current 'Y' value.
+
+CheckBox Property:
+ * value - (cp.ui.CheckBox) The currently value.
+
+For example:
+```lua
+local text = fcp.inspector.text
+-- Menu Property:
+text:compositing():blendMode():value("Subtract")
+-- Slider Property:
+text:compositing():opacity():value(50.0)
+-- XY Property:
+text:transform():position():x(-10.0)
+-- CheckBox property:
+text:stabilization():tripodMode():value(true)
+```
+
+You should also be able to show a specific property and it will be revealed:
+```lua
+text:stabilization():smoothing():show():value(1.5)
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [TextInspector](#textinspector)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.text.TextInspector.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided element could be a TextInspector. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if it matches, false if not.
|
+
+### Constructors
+
+#### [TextInspector](#textinspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.text.TextInspector(parent) -> cp.apple.finalcutpro.text.TextInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `TextInspector` object |
+| **Parameters** | |
+| **Returns** | |
+
+### Methods
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.inspector.text.TextInspector:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that hides the Text Inspector. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.inspector.text.TextInspector:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the Text Inspector. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.inspector.text.TextInspector:show() -> TextInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Text Inspector |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.title.TitleInspector.md b/api/cp/cp.apple.finalcutpro.inspector.title.TitleInspector.md
new file mode 100644
index 0000000..14568ff
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.title.TitleInspector.md
@@ -0,0 +1,23 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.title.TitleInspector
+---
+
+Title Inspector Module.
+
+Extends [BaseMotionPanel](cp.apple.finalcutpro.inspector.BaseMotionPanel.md).
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [TitleInspector](#titleinspector)
+
+## API Documentation
+
+### Constructors
+
+#### [TitleInspector](#titleinspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.title.TitleInspector(parent) -> cp.apple.finalcutpro.inspector.title.TitleInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `TitleInspector` object |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.transition.TransitionInspector.md b/api/cp/cp.apple.finalcutpro.inspector.transition.TransitionInspector.md
new file mode 100644
index 0000000..5303e38
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.transition.TransitionInspector.md
@@ -0,0 +1,57 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.transition.TransitionInspector
+---
+
+Transition Inspector Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [EASE](#ease)
+ * [FADE_TYPES](#fade_types)
+ * [LOOKS](#looks)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [TransitionInspector](#transitioninspector)
+
+## API Documentation
+
+### Constants
+
+#### [EASE](#ease)
+| **Signature** | `cp.apple.finalcutpro.inspector.transition.TransitionInspector.EASE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Ease Types |
+
+#### [FADE_TYPES](#fade_types)
+| **Signature** | `cp.apple.finalcutpro.inspector.transition.TransitionInspector.FADE_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Fade Types |
+
+#### [LOOKS](#looks)
+| **Signature** | `cp.apple.finalcutpro.inspector.transition.TransitionInspector.LOOKS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Cross Dissolve Looks |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.transition.TransitionInspector.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is the `TransitionInspector` |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if the element is a match, otherwise false.
|
+
+### Constructors
+
+#### [TransitionInspector](#transitioninspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.transition.TransitionInspector(parent) -> TransitionInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `TransitionInspector` object. |
+| **Parameters** | |
+| **Returns** | - A
TransitionInspector object
|
+
diff --git a/api/cp/cp.apple.finalcutpro.inspector.video.VideoInspector.md b/api/cp/cp.apple.finalcutpro.inspector.video.VideoInspector.md
new file mode 100644
index 0000000..53e7e42
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.inspector.video.VideoInspector.md
@@ -0,0 +1,141 @@
+# [docs](index.md) » cp.apple.finalcutpro.inspector.video.VideoInspector
+---
+
+Video Inspector Module.
+
+Section Rows (`compositing`, `transform`, etc.) have the following properties:
+* enabled - (cp.ui.CheckBox) Indicates if the section is enabled.
+* toggle - (cp.ui.Button) Will toggle the Hide/Show button.
+* reset - (cp.ui.Button) Will reset the contents of the section.
+* expanded - (cp.prop ) Get/sets whether the section is expanded.
+
+Property Rows depend on the type of property:
+
+Menu Property:
+* value - (cp.ui.PopUpButton) The current value of the property.
+
+Slider Property:
+* value - (cp.ui.Slider) The current value of the property.
+
+XY Property:
+* x - (cp.ui.TextField) The current 'X' value.
+* y - (cp.ui.TextField) The current 'Y' value.
+
+CheckBox Property:
+* value - (cp.ui.CheckBox) The currently value.
+
+For example:
+```lua
+local video = fcp.inspector.video
+-- Menu Property:
+video:compositing():blendMode():value("Subtract")
+-- Slider Property:
+video:compositing():opacity():value(50.0)
+-- XY Property:
+video:transform():position():x(-10.0)
+-- CheckBox property:
+video:stabilization():tripodMode():value(true)
+```
+
+You should also be able to show a specific property and it will be revealed:
+```lua
+video:stabilization():smoothing():show():value(1.5)
+```
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [BLEND_MODES](#blend_modes)
+ * [CROP_TYPES](#crop_types)
+ * [ROLLING_SHUTTER_AMOUNTS](#rolling_shutter_amounts)
+ * [SPATIAL_CONFORM_TYPES](#spatial_conform_types)
+ * [STABILIZATION_METHODS](#stabilization_methods)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+ * [selectedEffectCheckBox](#selectedeffectcheckbox)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [VideoInspector](#videoinspector)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contentUI](#contentui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [effectCheckBoxes](#effectcheckboxes)
+
+## API Documentation
+
+### Constants
+
+#### [BLEND_MODES](#blend_modes)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.BLEND_MODES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Blend Modes |
+
+#### [CROP_TYPES](#crop_types)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.CROP_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Crop Types |
+
+#### [ROLLING_SHUTTER_AMOUNTS](#rolling_shutter_amounts)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.ROLLING_SHUTTER_AMOUNTS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Rolling Shutter Amounts |
+
+#### [SPATIAL_CONFORM_TYPES](#spatial_conform_types)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.SPATIAL_CONFORM_TYPES -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Spatial Conform Types |
+
+#### [STABILIZATION_METHODS](#stabilization_methods)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.STABILIZATION_METHODS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Stabilisation Methods |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided element could be a VideoInspector. |
+| **Parameters** | - element - The element to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [selectedEffectCheckBox](#selectedeffectcheckbox)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector:selectedEffectCheckBox() -> axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the selected effect checkbox object. |
+| **Parameters** | |
+| **Returns** | |
+
+### Constructors
+
+#### [VideoInspector](#videoinspector)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector(parent) -> cp.apple.finalcutpro.inspector.video.VideoInspector` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `VideoInspector` object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` containing the properties rows, if available. |
+
+### Methods
+
+#### [effectCheckBoxes](#effectcheckboxes)
+| **Signature** | `cp.apple.finalcutpro.inspector.video.VideoInspector:effectCheckBoxes() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets a table containing all of the effect checkboxes. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.keycodes.md b/api/cp/cp.apple.finalcutpro.keycodes.md
deleted file mode 100644
index 43af2dd..0000000
--- a/api/cp/cp.apple.finalcutpro.keycodes.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.keycodes
----
-
-Keycodes Module
-
-## API Overview
-* Functions - API calls offered directly by the extension
- * [characterStringToKeyCode](#characterstringtokeycode)
- * [fcpxModifiersToHsModifiers](#fcpxmodifierstohsmodifiers)
- * [keypadCharacterToKeyCode](#keypadcharactertokeycode)
-
-## API Documentation
-
-### Functions
-
-#### [characterStringToKeyCode](#characterstringtokeycode)
-| **Signature** | `cp.apple.finalcutpro.keycodes.characterStringToKeyCode() -> string` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Translate Keyboard Character Strings from Command Set Format into Hammerspoon Format. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [fcpxModifiersToHsModifiers](#fcpxmodifierstohsmodifiers)
-| **Signature** | `cp.apple.finalcutpro.keycodes.fcpxModifiersToHsModifiers() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Translate Keyboard Modifiers from Command Set Format into Hammerspoon Format |
-| **Parameters** | |
-| **Returns** | |
-
-#### [keypadCharacterToKeyCode](#keypadcharactertokeycode)
-| **Signature** | `cp.apple.finalcutpro.keycodes.keypadCharacterToKeyCode() -> string` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Translate Keyboard Keypad Character Strings from Command Set Format into Hammerspoon Format. |
-| **Parameters** | |
-| **Returns** | |
-
diff --git a/api/cp/cp.apple.finalcutpro.main.BackgroundTasksDialog.md b/api/cp/cp.apple.finalcutpro.main.BackgroundTasksDialog.md
new file mode 100644
index 0000000..c641586
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.BackgroundTasksDialog.md
@@ -0,0 +1,48 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.BackgroundTasksDialog
+---
+
+Represents the Background Tasks warning dialog.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [BackgroundTasksDialog](#backgroundtasksdialog)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [cancel](#cancel)
+ * [continue](#continue)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.BackgroundTasksDialog.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is an `BackgroundTasksDialog` instance. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches the pattern for a `BackgroundTasksDialog``.
|
+
+### Constructors
+
+#### [BackgroundTasksDialog](#backgroundtasksdialog)
+| **Signature** | `cp.apple.finalcutpro.main.BackgroundTasksDialog(cpApp)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Background Tasks [Dialog](cp.ui.Dialog.md) |
+
+### Fields
+
+#### [cancel](#cancel)
+| **Signature** | `cp.apple.finalcutpro.main.BackgroundTasksDialog.cancel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Cancel button. |
+
+#### [continue](#continue)
+| **Signature** | `cp.apple.finalcutpro.main.BackgroundTasksDialog.continue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Continue button. |
+
diff --git a/api/cp/cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.md b/api/cp/cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.md
new file mode 100644
index 0000000..ec31932
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.md
@@ -0,0 +1,114 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover
+---
+
+Browser Marker Popup.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [BrowserMarkerPopover](#browsermarkerpopover)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [chapter](#chapter)
+ * [completed](#completed)
+ * [delete](#delete)
+ * [done](#done)
+ * [name](#name)
+ * [standard](#standard)
+ * [toDo](#todo)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [hide](#hide)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if a GUI element is the Browser Marker Popover or not |
+| **Parameters** | - element - The element you want to check
|
+| **Returns** | true if the element is the Browser Marker Popover otherwise false
|
+
+### Constructors
+
+#### [BrowserMarkerPopover](#browsermarkerpopover)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover(parent) -> BrowserMarkerPopover` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs a new Browser Marker Popover |
+| **Parameters** | - parent - The parent object
|
+| **Returns** | - The new
BrowserMarkerPopover instance.
|
+
+### Fields
+
+#### [chapter](#chapter)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.chapter ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Chapter" Marker button. |
+
+#### [completed](#completed)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.completed ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the "Completed" checkbox. This only available if you have a "To Do" marker selected. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [delete](#delete)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.delete ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the "Delete" [Button](cp.ui.Button.md). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [done](#done)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.done ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Done" [Button](cp.ui.Button.md). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [name](#name)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.name ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the Marker Name [TextField](cp.ui.TextField.md). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [standard](#standard)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.standard ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Standard" Marker button. |
+
+#### [toDo](#todo)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.toDo ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "To Do" Marker button. |
+
+### Methods
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover:hide() -> BrowserMarkerPopover` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Browser Marker Popover by clicking "Done" on the popover. |
+| **Parameters** | |
+| **Returns** | - BrowserMarkerPopover object
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover:show() -> BrowserMarkerPopover` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Browser Marker Popover by triggering "Add Marker and Modify" from the menu bar. |
+| **Parameters** | |
+| **Returns** | - BrowserMarkerPopover object
|
+
diff --git a/api/cp/cp.apple.finalcutpro.main.Browser.md b/api/cp/cp.apple.finalcutpro.main.Browser.md
index 3021208..6759ce5 100644
--- a/api/cp/cp.apple.finalcutpro.main.Browser.md
+++ b/api/cp/cp.apple.finalcutpro.main.Browser.md
@@ -3,24 +3,214 @@
Browser Module.
+## Submodules
+ * [cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover](cp.apple.finalcutpro.main.Browser.BrowserMarkerPopover.md)
+
## API Overview
-* Fields - Variables which can only be accessed from an object returned by a constructor
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
* [Browser](#browser)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [generators](#generators)
+ * [generatorsShowing](#generatorsshowing)
+ * [isOnPrimary](#isonprimary)
* [isOnSecondary](#isonsecondary)
+ * [libraries](#libraries)
+ * [librariesShowing](#librariesshowing)
+ * [markerPopover](#markerpopover)
+ * [media](#media)
+ * [mediaShowing](#mediashowing)
+ * [showGenerators](#showgenerators)
+ * [showLibraries](#showlibraries)
+ * [showMedia](#showmedia)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [appearanceAndFiltering](#appearanceandfiltering)
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+ * [doShowOnPrimary](#doshowonprimary)
+ * [doShowOnSecondary](#doshowonsecondary)
+ * [hide](#hide)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [showOnPrimary](#showonprimary)
+ * [showOnSecondary](#showonsecondary)
## API Documentation
-### Fields
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
#### [Browser](#browser)
-| **Signature** | `cp.apple.finalcutpro.main.Browser ` |
+| **Signature** | `cp.apple.finalcutpro.main.Browser(app) -> Browser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Browser` instance. |
+| **Parameters** | - app - The Final Cut Pro app instance.
|
+| **Returns** | |
+
+### Fields
+
+#### [generators](#generators)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.generators ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Generators Browser object. |
+
+#### [generatorsShowing](#generatorsshowing)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.generatorsShowing ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Browser showing? |
+| **Type** | Field |
+| **Description** | Is the 'Generators' button active, and thus showing? |
+
+#### [isOnPrimary](#isonprimary)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.isOnPrimary ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the Browser on the Primary Window? |
#### [isOnSecondary](#isonsecondary)
| **Signature** | `cp.apple.finalcutpro.main.Browser.isOnSecondary ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Browser on the Secondary Window? |
+| **Type** | Field |
+| **Description** | Is the Browser on the Secondary Window? |
+
+#### [libraries](#libraries)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.libraries ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [module](package.module.md) object. |
+| **Parameters** | |
+| **Returns** | - A
LibrariesBrowser object.
|
+
+#### [librariesShowing](#librariesshowing)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.librariesShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the 'Libraries' button active, and thus showing? |
+
+#### [markerPopover](#markerpopover)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.markerPopover ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Browser Marker Popover object. |
+
+#### [media](#media)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.media ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Media Browser object. |
+
+#### [mediaShowing](#mediashowing)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.mediaShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the 'Media' button active, and thus showing? |
+
+#### [showGenerators](#showgenerators)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.showGenerators ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The CheckBox indicating if the Generators Browser is showing. |
+
+#### [showLibraries](#showlibraries)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.showLibraries ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if Libraries is showing, and can be clicked to toggle. |
+
+#### [showMedia](#showmedia)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.showMedia ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | CheckBox indicating if the Media Browser is showing. |
+
+### Methods
+
+#### [appearanceAndFiltering](#appearanceandfiltering)
+| **Signature** | `cp.apple.finalcutpro.main.Browser.appearanceAndFiltering ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The Clip [AppearanceAndFiltering](cp.apple.finalcutpro.main.AppearanceAndFiltering.md) Menu Popover |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will hide the Browser. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will ensure the Browser is showing. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doShowOnPrimary](#doshowonprimary)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:doShowOnPrimary() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show the Browser on Primary Screen. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doShowOnSecondary](#doshowonsecondary)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:doShowOnSecondary() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show the Browser on Secondary Screen. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:hide() -> Browser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Browser layout. |
+| **Parameters** | - layout - A table containing the Browser layout settings - created using
cp.apple.finalcutpro.main.Browser:saveLayout().
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Browser layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Browser Layout.
|
+
+#### [showOnPrimary](#showonprimary)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:showOnPrimary() -> Browser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Browser on Primary Screen. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showOnSecondary](#showonsecondary)
+| **Signature** | `cp.apple.finalcutpro.main.Browser:showOnSecondary() -> Browser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Browser on Secondary Screen. |
+| **Parameters** | |
+| **Returns** | |
diff --git a/api/cp/cp.apple.finalcutpro.main.ColorBoard.md b/api/cp/cp.apple.finalcutpro.main.ColorBoard.md
deleted file mode 100644
index 2fc0578..0000000
--- a/api/cp/cp.apple.finalcutpro.main.ColorBoard.md
+++ /dev/null
@@ -1,318 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.ColorBoard
----
-
-Color Board Module.
-
-## API Overview
-* Constants - Useful values which cannot be changed
- * [aspect](#aspect)
- * [color](#color)
- * [exposure](#exposure)
- * [saturation](#saturation)
-* Variables - Configurable values
- * [currentAspect](#currentaspect)
-* Functions - API calls offered directly by the extension
- * [isColorBoard](#iscolorboard)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [applyAngle](#applyangle)
- * [applyPercentage](#applypercentage)
- * [aspectPropertyPanelUI](#aspectpropertypanelui)
- * [childUI](#childui)
- * [colorInspectorBarUI](#colorinspectorbarui)
- * [colorSatExpUI](#colorsatexpui)
- * [getAngle](#getangle)
- * [getAspect](#getaspect)
- * [getPercentage](#getpercentage)
- * [hide](#hide)
- * [isActive](#isactive)
- * [isShowing](#isshowing)
- * [new](#new)
- * [parent](#parent)
- * [puckUI](#puckui)
- * [reset](#reset)
- * [selectedPanel](#selectedpanel)
- * [selectPuck](#selectpuck)
- * [shiftAngle](#shiftangle)
- * [shiftPercentage](#shiftpercentage)
- * [show](#show)
- * [showInspectorUI](#showinspectorui)
- * [showPanel](#showpanel)
- * [startPucker](#startpucker)
- * [togglePanel](#togglepanel)
- * [topToolbarUI](#toptoolbarui)
- * [UI](#ui)
-
-## API Documentation
-
-### Constants
-
-#### [aspect](#aspect)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard.aspect -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A table containing tables of all the aspect panel settings |
-
-#### [color](#color)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard.aspect.color -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A table containing the Color Board Color panel settings |
-
-#### [exposure](#exposure)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard.aspect.exposure -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A table containing the Color Board Exposure panel settings |
-
-#### [saturation](#saturation)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard.aspect.saturation -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A table containing the Color Board Saturation panel settings |
-
-### Variables
-
-#### [currentAspect](#currentaspect)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard.currentAspect -> string` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Variable |
-| **Description** | The current aspect as a string. |
-
-### Functions
-
-#### [isColorBoard](#iscolorboard)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard.isColorBoard(element) -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks to see if a GUI element is the Color Board or not |
-| **Parameters** | - `element` - The element you want to check
|
-| **Returns** | - `true` if the `element` is a Color Board otherwise `false`
|
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [applyAngle](#applyangle)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:applyAngle(aspect, property, value) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Applies a Color Board Angle value to the specified aspect/property |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
- value - value as string
|
-| **Returns** | |
-
-#### [applyPercentage](#applypercentage)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:applyPercentage(aspect, property, value) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Applies a Color Board Percentage value to the specified aspect/property |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
- value - value as string
|
-| **Returns** | |
-
-#### [aspectPropertyPanelUI](#aspectpropertypanelui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:aspectPropertyPanelUI(aspect, property, type) -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures that the specified aspect/property panel is visible and returns the specified value type `hs._asm.axuielement` object |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
- type - "pct" or "angle"
|
-| **Returns** | - An `hs._asm.axuielement` object or `nil` if an error occurs
|
-
-#### [childUI](#childui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:childUI(id) -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the `hs._asm.axuielement` object for a child with the specified ID. |
-| **Parameters** | - id - `AXIdentifier` of the child
|
-| **Returns** | - An `hs._asm.axuielement` object
|
-
-#### [colorInspectorBarUI](#colorinspectorbarui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:colorInspectorBarUI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `hs._asm.axuielement` object for the Final Cut Pro 10.4 Color Board Inspector Bar (i.e. where you can add new Color Corrections from the dropdown) |
-| **Parameters** | |
-| **Returns** | - A `hs._asm.axuielement` object
|
-
-#### [colorSatExpUI](#colorsatexpui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:colorSatExpUI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the `hs._asm.axuielement` object for the `AXRadioGroup` which houses the "Color", "Saturation" and "Exposure" button |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
-
-#### [getAngle](#getangle)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:getAngle(aspect, property) -> number | nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets an angle value of the specified `aspect` and `property` |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
|
-| **Returns** | - Number or `nil` if an error occurred
|
-
-#### [getAspect](#getaspect)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:getAspect(aspect, property) -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets a table containing the ID information for a specific `aspect` and `property` |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
|
-| **Returns** | - A table or `nil` if an error occurs
|
-
-#### [getPercentage](#getpercentage)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:getPercentage(aspect, property) -> number | nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets a percentage value of the specified `aspect` and `property` |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
|
-| **Returns** | - Number or `nil` if an error occurred
|
-
-#### [hide](#hide)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:hide() -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Hides the Color Board |
-| **Parameters** | |
-| **Returns** | |
-
-#### [isActive](#isactive)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:isActive() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns whether or not the Color Board is active |
-| **Parameters** | |
-| **Returns** | - `true` if the Color Board is active, otherwise `false`
|
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:isShowing() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns whether or not the Color Board is visible |
-| **Parameters** | |
-| **Returns** | - `true` if the Color Board is showing, otherwise `false`
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:new(parent) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new ColorBoard object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorBoard's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [puckUI](#puckui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:puckUI(aspect, property) -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the `hs._asm.axuielement` object of a specific Color Board puck |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
|
-| **Returns** | - An `hs._asm.axuielement` object
|
-
-#### [reset](#reset)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:reset(aspect) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Resets a specified `aspect` |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
|
-| **Returns** | |
-
-#### [selectedPanel](#selectedpanel)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:selectedPanel() -> string | nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the currently selected Color Board panel |
-| **Parameters** | |
-| **Returns** | - "Color", "Saturation", "Exposure" or `nil` if an error occurs
|
-
-#### [selectPuck](#selectpuck)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:selectPuck(aspect, property) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Selects a specific Color Board puck |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
|
-| **Returns** | |
-
-#### [shiftAngle](#shiftangle)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:shiftAngle(aspect, property, shift) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Shifts a Color Board Angle value of the specified aspect/property |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
- shift - number you want to increase/decrease the angle by
|
-| **Returns** | |
-
-#### [shiftPercentage](#shiftpercentage)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:shiftPercentage(aspect, property, shift) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Shifts a Color Board Percentage value of the specified aspect/property |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
- shift - number you want to increase/decrease the percentage by
|
-| **Returns** | |
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:show() -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Shows the Color Board |
-| **Parameters** | |
-| **Returns** | |
-
-#### [showInspectorUI](#showinspectorui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:showInspectorUI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the `hs._asm.axuielement` object for the inspector |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
-
-#### [showPanel](#showpanel)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:showPanel(aspect) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Shows a specific panel based on the specified `aspect` |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
|
-| **Returns** | |
-
-#### [startPucker](#startpucker)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:startPucker(aspect, property) -> Pucker object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a Pucker object for the specified `aspect` and `property` |
-| **Parameters** | - aspect - "color", "saturation" or "exposure"
- property - "global", "shadows", "midtones" or "highlights"
|
-| **Returns** | |
-
-#### [togglePanel](#togglepanel)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:togglePanel() -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Toggles the Color Board Panels between "Color", "Saturation" and "Exposure" |
-| **Parameters** | |
-| **Returns** | |
-
-#### [topToolbarUI](#toptoolbarui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:topToolbarUI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the `hs._asm.axuielement` object for the top toolbar (i.e. where the Back Button is located in Final Cut Pro 10.3) |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
-| **Notes** | - This object doesn't exist in Final Cut Pro 10.4 as the Color Board is now contained within the Color Inspector
|
-
-#### [UI](#ui)
-| **Signature** | `cp.apple.finalcutpro.main.ColorBoard:UI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `hs._asm.axuielement` object for the Color Board |
-| **Parameters** | |
-| **Returns** | - A `hs._asm.axuielement` object
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.ColorPucker.md b/api/cp/cp.apple.finalcutpro.main.ColorPucker.md
deleted file mode 100644
index 6c47aec..0000000
--- a/api/cp/cp.apple.finalcutpro.main.ColorPucker.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.ColorPucker
----
-
-Color Pucker Module.
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.finalcutpro.main.EffectsBrowser.md b/api/cp/cp.apple.finalcutpro.main.EffectsBrowser.md
index 988e703..66ddc82 100644
--- a/api/cp/cp.apple.finalcutpro.main.EffectsBrowser.md
+++ b/api/cp/cp.apple.finalcutpro.main.EffectsBrowser.md
@@ -4,36 +4,364 @@
Effects Browser Module.
## API Overview
+* Constants - Useful values which cannot be changed
+ * [EFFECTS](#effects)
+ * [TRANSITIONS](#transitions)
+* Variables - Configurable values
+ * [isShowing](#isshowing)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [EffectsBrowser](#effectsbrowser)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contents](#contents)
+ * [group](#group)
+ * [mainGroupUI](#maingroupui)
+ * [search](#search)
+ * [sidebar](#sidebar)
+ * [sidebarToggle](#sidebartoggle)
+ * [toggleButton](#togglebutton)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [applyItem](#applyitem)
+ * [audioCategoryRowsUI](#audiocategoryrowsui)
+ * [currentItemsUI](#currentitemsui)
+ * [doHideSidebar](#dohidesidebar)
+ * [doShow](#doshow)
+ * [doShowSidebar](#doshowsidebar)
+ * [doToggleSidebar](#dotogglesidebar)
+ * [getCurrentTitles](#getcurrenttitles)
+ * [hide](#hide)
+ * [hideSidebar](#hidesidebar)
+ * [itemIsSelected](#itemisselected)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [selectedItemsUI](#selecteditemsui)
+ * [show](#show)
+ * [showAllAudioEffects](#showallaudioeffects)
+ * [showAllEffects](#showalleffects)
+ * [showAllTransitions](#showalltransitions)
+ * [showAllVideoEffects](#showallvideoeffects)
* [showAudioCategory](#showaudiocategory)
+ * [showInstalledEffects](#showinstalledeffects)
+ * [showInstalledTransitions](#showinstalledtransitions)
+ * [showSidebar](#showsidebar)
* [showTransitionsCategory](#showtransitionscategory)
* [showVideoCategory](#showvideocategory)
+ * [toggleSidebar](#togglesidebar)
+ * [type](#type)
+ * [videoCategoryRowsUI](#videocategoryrowsui)
## API Documentation
+### Constants
+
+#### [EFFECTS](#effects)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.EFFECTS -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Effects. |
+
+#### [TRANSITIONS](#transitions)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.TRANSITIONS -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Transitions. |
+
+### Variables
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Is the Effects Browser showing? |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [EffectsBrowser](#effectsbrowser)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser(parent, type) -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `EffectsBrowser` instance. |
+| **Parameters** | - parent - The parent object.
- type - A string determining whether the Effects Browser is for Effects (
cp.apple.finalcutpro.main.EffectsBrowser.EFFECTS) or Transitions (cp.apple.finalcutpro.main.EffectsBrowser.TRANSITIONS).
|
+| **Returns** | - A new
EffectsBrowser object.
|
+
+### Fields
+
+#### [contents](#contents)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.contents ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Effects Browser Contents. |
+
+#### [group](#group)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.group ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The group `PopUpButton`. |
+
+#### [mainGroupUI](#maingroupui)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:mainGroupUI() -> ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Main Group UI. |
+
+#### [search](#search)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.search ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Search `PopUpButton` object. |
+
+#### [sidebar](#sidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.sidebar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The sidebar `Table` object. |
+
+#### [sidebarToggle](#sidebartoggle)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.sidebarToggle ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Sidebar Toggle. |
+
+#### [toggleButton](#togglebutton)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser.toggleButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Effects Browser Toggle Button. |
+
### Methods
+#### [applyItem](#applyitem)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:applyItem(itemUI) -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Applies an item by double clicking on it. |
+| **Parameters** | - itemUI - The
axuielementObject of the item you want to apply.
|
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [audioCategoryRowsUI](#audiocategoryrowsui)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:audioCategoryRowsUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the Audio Category Rows UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
+
+#### [currentItemsUI](#currentitemsui)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:currentItemsUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the current items UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
+
+#### [doHideSidebar](#dohidesidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:doHideSidebar() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will hide the Sidebar. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will show the Effects Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doShowSidebar](#doshowsidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:doShowSidebar() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will show the Sidebar. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doToggleSidebar](#dotogglesidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:doToggleSidebar() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` to toggle the Sidebar. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getCurrentTitles](#getcurrenttitles)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:getCurrentTitles() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of titles for all effects/transitions currently visible. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:hide() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hide the Effects Browser. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [hideSidebar](#hidesidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:hideSidebar() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hide Sidebar. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [itemIsSelected](#itemisselected)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:itemIsSelected(itemUI) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks to see if an item is selected. |
+| **Parameters** | - itemUI - A
axuielementObject to check.
|
+| **Returns** | true if the item is selected, otherwise false.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Effects Browser layout. |
+| **Parameters** | - layout - A table containing the Effects Browser layout settings - created using
cp.apple.finalcutpro.main.Browser:saveLayout().
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Effects Browser layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Effects Browser Layout.
|
+
+#### [selectedItemsUI](#selecteditemsui)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:selectedItemsUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the selected items UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:show() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Effects Browser. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [showAllAudioEffects](#showallaudioeffects)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showAllAudioEffects() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show All Audio Effects. |
+| **Parameters** | |
+| **Returns** | true if successful otherwise false.
|
+
+#### [showAllEffects](#showalleffects)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showAllEffects() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show All Effects. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [showAllTransitions](#showalltransitions)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showAllTransitions() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show All Transitions. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [showAllVideoEffects](#showallvideoeffects)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showAllVideoEffects() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show All Video Effects. |
+| **Parameters** | |
+| **Returns** | true if successful otherwise false.
|
+
#### [showAudioCategory](#showaudiocategory)
| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showAudioCategory(name) -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures the sidebar is showing and that the selected 'Audio' category is selected, if available. |
-| **Parameters** | - * `name` - The category name, in the current language.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Ensures the sidebar is showing and that the selected 'Audio' category is selected, if available. |
+| **Parameters** | name - The category name, in the current language.
|
+| **Returns** | |
+
+#### [showInstalledEffects](#showinstalledeffects)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showInstalledEffects() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Installed Effects. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [showInstalledTransitions](#showinstalledtransitions)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showInstalledTransitions() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Installed Transitions. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [showSidebar](#showsidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showSidebar() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Sidebar. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
#### [showTransitionsCategory](#showtransitionscategory)
-| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showTransitionsCategory(name) -> self` |
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showTransitionsCategory(name) -> EffectsBrowser` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures the sidebar is showing and that the selected 'Transitions' category is selected, if available. |
-| **Parameters** | - * `name` - The category name, in the current language.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Ensures the sidebar is showing and that the selected 'Transitions' category is selected, if available. |
+| **Parameters** | - name - The category name, in the current language.
|
+| **Returns** | - The
EffectsBrowser object.
|
#### [showVideoCategory](#showvideocategory)
-| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showVideoCategory(name) -> self` |
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:showVideoCategory(name) -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Ensures the sidebar is showing and that the selected 'Video' category is selected, if available. |
+| **Parameters** | - name - The category name, in the current language.
|
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [toggleSidebar](#togglesidebar)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:toggleSidebar() -> EffectsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Toggle Sidebar. |
+| **Parameters** | |
+| **Returns** | - The
EffectsBrowser object.
|
+
+#### [type](#type)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:type() -> App` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Type of Effects Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [videoCategoryRowsUI](#videocategoryrowsui)
+| **Signature** | `cp.apple.finalcutpro.main.EffectsBrowser:videoCategoryRowsUI() -> axuielementObject` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures the sidebar is showing and that the selected 'Video' category is selected, if available. |
-| **Parameters** | - * `name` - The category name, in the current language.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Gets the Video Category Rows UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
diff --git a/api/cp/cp.apple.finalcutpro.main.FindAndReplaceTitleText.md b/api/cp/cp.apple.finalcutpro.main.FindAndReplaceTitleText.md
new file mode 100644
index 0000000..225456f
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.FindAndReplaceTitleText.md
@@ -0,0 +1,123 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.FindAndReplaceTitleText
+---
+
+Represents a "Find and Replace Title Text" dialogue box.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [FindAndReplaceTitleText](#findandreplacetitletext)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [findText](#findtext)
+ * [loopSearch](#loopsearch)
+ * [matchCase](#matchcase)
+ * [next](#next)
+ * [previous](#previous)
+ * [replace](#replace)
+ * [replaceAll](#replaceall)
+ * [replaceAndFind](#replaceandfind)
+ * [replaceText](#replacetext)
+ * [searchIn](#searchin)
+ * [wholeWords](#wholewords)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doFindAndReplaceAll](#dofindandreplaceall)
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+
+## API Documentation
+
+### Constructors
+
+#### [FindAndReplaceTitleText](#findandreplacetitletext)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText(cpApp, upProp)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new "Find and Replace Title Text" [Dialog](cp.ui.Dialog.md) |
+
+### Fields
+
+#### [findText](#findtext)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.findText ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Find" search field, as a [TextField](cp.ui.TextField.md) |
+
+#### [loopSearch](#loopsearch)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.loopSearch ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Loop search" [CheckBox](cp.ui.CheckBox.md). |
+
+#### [matchCase](#matchcase)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.matchCase ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Match case" [CheckBox](cp.ui.CheckBox.md). |
+
+#### [next](#next)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.next ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Next" [Button](cp.ui.Button.md). |
+
+#### [previous](#previous)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.previous ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Previous" [Button](cp.ui.Button.md). |
+
+#### [replace](#replace)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.replace ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Replace" [Button](cp.ui.Button.md). |
+
+#### [replaceAll](#replaceall)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.replaceAll ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Replace All" [Button](cp.ui.Button.md). |
+
+#### [replaceAndFind](#replaceandfind)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.replaceAndFind ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Replace & Find" [Button](cp.ui.Button.md). |
+
+#### [replaceText](#replacetext)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.replaceText ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Replace" search field, as a [TextField](cp.ui.TextField.md) |
+
+#### [searchIn](#searchin)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.searchIn ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Search In" [PopUpButton](cp.ui.PopUpButton.md). |
+
+#### [wholeWords](#wholewords)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText.wholeWords ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Whole words" [CheckBox](cp.ui.CheckBox.md). |
+
+### Methods
+
+#### [doFindAndReplaceAll](#dofindandreplaceall)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText:doFindAndReplaceAll(find, replace) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to find all titles containing `find` and replace them with `replace`. |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to hide the "Find And Replace Title Text" dialog. |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.FindAndReplaceTitleText:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to show the "Find And Replace Title Text" dialog. |
+
diff --git a/api/cp/cp.apple.finalcutpro.main.FullScreenWindow.md b/api/cp/cp.apple.finalcutpro.main.FullScreenWindow.md
index db31de9..516e4c5 100644
--- a/api/cp/cp.apple.finalcutpro.main.FullScreenWindow.md
+++ b/api/cp/cp.apple.finalcutpro.main.FullScreenWindow.md
@@ -1,21 +1,80 @@
# [docs](index.md) » cp.apple.finalcutpro.main.FullScreenWindow
---
-Full Screen Window
+Full Screen Window Player.
+
+Triggered by the "View > Playback > Play Full Screen" menubar item.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [FullScreenWindow](#fullscreenwindow)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [isFullScreen](#isfullscreen)
+ * [rootGroupUI](#rootgroupui)
+ * [viewerGroupUI](#viewergroupui)
* Methods - API calls which can only be made on an object returned by a constructor
- * [watch](#watch)
+ * [doShow](#doshow)
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [FullScreenWindow](#fullscreenwindow)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow(app) -> FullScreenWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new FCPX `FullScreenWindow` instance. |
+| **Parameters** | - app - The FCP app instance.
|
+| **Returns** | - The new
FullScreenWindow.
|
+
+### Fields
+
+#### [isFullScreen](#isfullscreen)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow.isFullScreen ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the window is full-screen. |
+
+#### [rootGroupUI](#rootgroupui)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow.rootGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The root `AXGroup`. |
+
+#### [viewerGroupUI](#viewergroupui)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow.viewerGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Viewer's group UI element. |
+
### Methods
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow:watch() -> bool` |
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow:doShow() -> ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` that attempts to show the full screen window. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.FullScreenWindow:show() -> cp.apple.finalcutpro` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the command editor |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `show(CommandEditor)` - Triggered when the window is shown.
- `hide(CommandEditor)` - Triggered when the window is hidden.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Attempts to show the full screen window. |
+| **Parameters** | |
+| **Returns** | |
diff --git a/api/cp/cp.apple.finalcutpro.main.GeneratorsBrowser.md b/api/cp/cp.apple.finalcutpro.main.GeneratorsBrowser.md
index 209ea72..3f2fa41 100644
--- a/api/cp/cp.apple.finalcutpro.main.GeneratorsBrowser.md
+++ b/api/cp/cp.apple.finalcutpro.main.GeneratorsBrowser.md
@@ -4,9 +4,33 @@
Generators Browser Module.
## API Overview
+* Constants - Useful values which cannot be changed
+ * [TITLE](#title)
+* Variables - Configurable values
+ * [isShowing](#isshowing)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [GeneratorsBrowser](#generatorsbrowser)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contents](#contents)
+ * [group](#group)
+ * [mainGroupUI](#maingroupui)
+ * [search](#search)
+ * [sidebar](#sidebar)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [applyItem](#applyitem)
+ * [currentItemsUI](#currentitemsui)
+ * [getCurrentTitles](#getcurrenttitles)
+ * [getGeneratorsRowLabel](#getgeneratorsrowlabel)
* [getTitlesRowLabel](#gettitlesrowlabel)
+ * [hide](#hide)
+ * [itemIsSelected](#itemisselected)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [selectedItemsUI](#selecteditemsui)
+ * [show](#show)
+ * [showAllGenerators](#showallgenerators)
* [showAllTitles](#showalltitles)
+ * [showGeneratorsCategory](#showgeneratorscategory)
* [showInstalledGenerators](#showinstalledgenerators)
* [showInstalledTitles](#showinstalledtitles)
* [showSidebar](#showsidebar)
@@ -15,61 +39,215 @@ Generators Browser Module.
## API Documentation
+### Constants
+
+#### [TITLE](#title)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.TITLE -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Titles & Generators Title. |
+
+### Variables
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Is the Generators Browser showing? |
+
+### Constructors
+
+#### [GeneratorsBrowser](#generatorsbrowser)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser(parent) -> GeneratorsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `GeneratorsBrowser` instance. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | - A new
GeneratorsBrowser object.
|
+
+### Fields
+
+#### [contents](#contents)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.contents ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Generators Browser Contents. |
+
+#### [group](#group)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.group ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The group. |
+
+#### [mainGroupUI](#maingroupui)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.mainGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Main Group UI. |
+
+#### [search](#search)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.search ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the Search TextField object. |
+
+#### [sidebar](#sidebar)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser.sidebar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The sidebar object. |
+
### Methods
+#### [applyItem](#applyitem)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:applyItem(itemUI) -> GeneratorsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Applies an item by double clicking on it. |
+| **Parameters** | - itemUI - The
axuielementObject of the item you want to apply.
|
+| **Returns** | - The
GeneratorsBrowser object.
|
+
+#### [currentItemsUI](#currentitemsui)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:currentItemsUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the current items UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
+
+#### [getCurrentTitles](#getcurrenttitles)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:getCurrentTitles() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of titles for all generators currently visible. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getGeneratorsRowLabel](#getgeneratorsrowlabel)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:getGeneratorsRowLabel() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets a Generators Row Label. |
+| **Parameters** | |
+| **Returns** | - The Generators Row Label as string.
|
+
#### [getTitlesRowLabel](#gettitlesrowlabel)
| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:getTitlesRowLabel() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the label of the 'Titles' row in the current language. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Returns the label of the 'Titles' row in the current language. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:hide() -> GeneratorsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Generators Browser. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser instance.
|
+
+#### [itemIsSelected](#itemisselected)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:itemIsSelected(itemUI) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks to see if an item is selected. |
+| **Parameters** | - itemUI - A
axuielementObject to check.
|
+| **Returns** | true if the item is selected, otherwise false.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Generators Browser layout. |
+| **Parameters** | - layout - A table containing the Generators Browser layout settings - created using
cp.apple.finalcutpro.main.GeneratorsBrowser:saveLayout().
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Generators Browser layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Effects Browser Layout.
|
+
+#### [selectedItemsUI](#selecteditemsui)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:selectedItemsUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the selected items UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:show() -> GeneratorsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Generators Browser. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser instance.
|
+
+#### [showAllGenerators](#showallgenerators)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showAllGenerators() -> GeneratorsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show All Generators. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser object.
|
#### [showAllTitles](#showalltitles)
-| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showAllTitles() -> self` |
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showAllTitles() -> GeneratorsBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Ensures the sidebar is showing in the Generators & Titles panel, focused on all 'Titles'. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser object.
|
+
+#### [showGeneratorsCategory](#showgeneratorscategory)
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showGeneratorsCategory(name) -> GeneratorsBrowser` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures the sidebar is showing in the Generators & Titles panel, focused on all 'Titles'. |
-| **Parameters** | |
-| **Returns** | - * The Generators Browser.
|
+| **Type** | Method |
+| **Description** | Show a specific Generators Category. |
+| **Parameters** | - name - The name of the Generators Category to show.
|
+| **Returns** | - The
GeneratorsBrowser object.
|
#### [showInstalledGenerators](#showinstalledgenerators)
-| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showInstalledGenerators() -> self` |
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showInstalledGenerators() -> GeneratorsBrowser` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures that the browser is showing 'Installed Generators'. |
-| **Parameters** | |
-| **Returns** | - * The Generators Browser.
|
+| **Type** | Method |
+| **Description** | Ensures that the browser is showing 'Installed Generators'. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser object.
|
#### [showInstalledTitles](#showinstalledtitles)
-| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showInstalledTitles() -> self` |
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showInstalledTitles() -> GeneratorsBrowser` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures that the browser is showing 'Installed Titles'. |
-| **Parameters** | |
-| **Returns** | - * The Generators Browser.
|
+| **Type** | Method |
+| **Description** | Ensures that the browser is showing 'Installed Titles'. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser object.
|
#### [showSidebar](#showsidebar)
-| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showSidebar() -> self` |
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showSidebar() -> GeneratorsBrowser` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures the sidebar is showing in the Generators & Titles panel. |
-| **Parameters** | |
-| **Returns** | - * The Generators Browser.
|
+| **Type** | Method |
+| **Description** | Ensures the sidebar is showing in the Generators & Titles panel. |
+| **Parameters** | |
+| **Returns** | - The
GeneratorsBrowser object.
|
#### [showTitlesCategory](#showtitlescategory)
| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:showTitlesCategory(name) -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Ensures the sidebar is showing and that the selected 'Titles' category is selected, if available. |
-| **Parameters** | - * `name` - The category name, in the current language.
|
-| **Returns** | - * The Generators Browser.
|
+| **Type** | Method |
+| **Description** | Ensures the sidebar is showing and that the selected 'Titles' category is selected, if available. |
+| **Parameters** | - name - The category name, in the current language.
|
+| **Returns** | |
#### [topCategoriesUI](#topcategoriesui)
-| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:topCategoriesUI() -> table of axuielements` |
+| **Signature** | `cp.apple.finalcutpro.main.GeneratorsBrowser:topCategoriesUI() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns an array of the top-level categories in the sidebar. |
-| **Parameters** | |
-| **Returns** | - * The array of category rows.
|
+| **Type** | Method |
+| **Description** | Returns an array of the top-level categories in the sidebar. |
+| **Parameters** | |
+| **Returns** | - The array of category rows.
|
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.AudioInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.AudioInspector.md
deleted file mode 100644
index f9fcf2c..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.AudioInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.AudioInspector
----
-
-Audio Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.AudioInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.AudioInspector:new(parent) -> AudioInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new AudioInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.AudioInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the AudioInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard.md b/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard.md
deleted file mode 100644
index 94beee9..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard
----
-
-Color Board Module.
-
-Requires Final Cut Pro 10.4 or later.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [hide](#hide)
- * [isShowing](#isshowing)
- * [new](#new)
- * [parent](#parent)
- * [show](#show)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [hide](#hide)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard:hide() -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Hide's the Color Board, by hiding the entire Inspector. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard:isShowing() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Is the Color Board currently showing? |
-| **Parameters** | |
-| **Returns** | - `true` if showing, otherwise `false`
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard:new(parent) -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new ColorBoard object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorBoard's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard:show() -> ColorBoard object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Show's the Color Board within the Color Inspector. |
-| **Parameters** | |
-| **Returns** | |
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves.md b/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves.md
deleted file mode 100644
index c509dd1..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves
----
-
-Color Curves Module.
-
-Requires Final Cut Pro 10.4 or later.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
- * [show](#show)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves:new(parent) -> ColorCurves object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new ColorCurves object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorCurves's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves:show() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Show's the Color Board within the Color Inspector. |
-| **Parameters** | |
-| **Returns** | |
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.md b/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.md
deleted file mode 100644
index cab5d3b..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels
----
-
-Color Wheels Module.
-
-Requires Final Cut Pro 10.4 or later.
-
-## API Overview
-* Constants - Useful values which cannot be changed
- * [VIEW_MODES](#view_modes)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [isShowing](#isshowing)
- * [new](#new)
- * [parent](#parent)
- * [show](#show)
- * [viewMode](#viewmode)
-
-## API Documentation
-
-### Constants
-
-#### [VIEW_MODES](#view_modes)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.VIEW_MODES -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | View Modes for Color Wheels |
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels:isShowing() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Is the Color Wheels currently showing? |
-| **Parameters** | |
-| **Returns** | - `true` if showing, otherwise `false`
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels:new(parent) -> ColorInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new ColorWheels object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorWheels's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels:show() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Show's the Color Board within the Color Inspector. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [viewMode](#viewmode)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels:viewMode([value]) -> string | nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets or gets the View Mode for the Color Wheels. |
-| **Parameters** | - [value] - An optional value to set the View Mode, as defined in `cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.VIEW_MODES`.
|
-| **Returns** | - A string containing the View Mode or `nil` if an error occurs.
|
-| **Notes** | - Value can be:
- All Wheels
- Single Wheels
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves.md b/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves.md
deleted file mode 100644
index 21a65c5..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves
----
-
-Hue/Saturation Curves Module.
-
-Requires Final Cut Pro 10.4 or later.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
- * [show](#show)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves:new(parent) -> HueSaturationCurves object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new HueSaturationCurves object |
-| **Parameters** | |
-| **Returns** | - A HueSaturationCurves object
|
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the HueSaturationCurves's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves:show() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Show's the Color Board within the Color Inspector. |
-| **Parameters** | |
-| **Returns** | - HueSaturationCurves object
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.md
deleted file mode 100644
index 2a1cd81..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.ColorInspector.md
+++ /dev/null
@@ -1,138 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.ColorInspector
----
-
-Color Inspector Module.
-
-Requires Final Cut Pro 10.4 or later.
-
-## Submodules
- * [cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard](cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorBoard.md)
- * [cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves](cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorCurves.md)
- * [cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels](cp.apple.finalcutpro.main.Inspector.ColorInspector.ColorWheels.md)
- * [cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves](cp.apple.finalcutpro.main.Inspector.ColorInspector.HueSaturationCurves.md)
-
-## API Overview
-* Constants - Useful values which cannot be changed
- * [CORRECTION_TYPES](#correction_types)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [colorBoard](#colorboard)
- * [colorCurves](#colorcurves)
- * [colorInspectorBarUI](#colorinspectorbarui)
- * [colorWheels](#colorwheels)
- * [hide](#hide)
- * [hueSaturationCurves](#huesaturationcurves)
- * [isShowing](#isshowing)
- * [new](#new)
- * [parent](#parent)
- * [show](#show)
- * [UI](#ui)
-
-## API Documentation
-
-### Constants
-
-#### [CORRECTION_TYPES](#correction_types)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector.CORRECTION_TYPES` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of Correction Types |
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [colorBoard](#colorboard)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:colorBoard() -> ColorBoard` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the ColorBoard object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [colorCurves](#colorcurves)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:colorCurves() -> ColorCurves` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the ColorCurves object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [colorInspectorBarUI](#colorinspectorbarui)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:colorInspectorBarUI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `hs._asm.axuielement` object for the Final Cut Pro 10.4 Color Board Inspector Bar (i.e. where you can add new Color Corrections from the dropdown) |
-| **Parameters** | |
-| **Returns** | - A `hs._asm.axuielement` object or `nil` if not running Final Cut Pro 10.4 (or later), or if an error occurs.
|
-
-#### [colorWheels](#colorwheels)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:colorWheels() -> ColorWheels` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the ColorWheels object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [hide](#hide)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:hide() -> ColorInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Hides's the Color Inspector |
-| **Parameters** | |
-| **Returns** | |
-
-#### [hueSaturationCurves](#huesaturationcurves)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:hueSaturationCurves() -> HueSaturationCurves` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the HueSaturationCurves object. |
-| **Parameters** | |
-| **Returns** | - A new HueSaturationCurves object
|
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:isShowing([correctionType]) -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns whether or not the Color Inspector is visible |
-| **Parameters** | - [correctionType] - A string containing the name of the Correction Type (see cp.apple.finalcutpro.main.Inspector.ColorInspector.CORRECTION_TYPES).
|
-| **Returns** | - `true` if the Color Inspector is showing, otherwise `false`
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:new(parent) -> ColorInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new ColorInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:show([correctionType]) -> ColorInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Show's the Color Inspector |
-| **Parameters** | - [correctionType] - A string containing the name of the Correction Type (see cp.apple.finalcutpro.main.Inspector.ColorInspector.CORRECTION_TYPES).
|
-| **Returns** | |
-
-#### [UI](#ui)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ColorInspector:UI() -> hs._asm.axuielement object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `hs._asm.axuielement` object for the Final Cut Pro 10.4 Color Board Inspector. |
-| **Parameters** | |
-| **Returns** | - A `hs._asm.axuielement` object or `nil` if not running Final Cut Pro 10.4 (or later), or if an error occurs.
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.EffectInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.EffectInspector.md
deleted file mode 100644
index 391a963..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.EffectInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.EffectInspector
----
-
-Effect Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.EffectInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.EffectInspector:new(parent) -> EffectInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new EffectInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.EffectInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the EffectInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.GeneratorInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.GeneratorInspector.md
deleted file mode 100644
index aa5fb7b..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.GeneratorInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.GeneratorInspector
----
-
-Generator Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.GeneratorInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.GeneratorInspector:new(parent) -> GeneratorInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new GeneratorInspector object |
-| **Parameters** | |
-| **Returns** | - A GeneratorInspector object
|
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.GeneratorInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the GeneratorInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.InfoInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.InfoInspector.md
deleted file mode 100644
index 639e925..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.InfoInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.InfoInspector
----
-
-Video Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.InfoInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.InfoInspector:new(parent) -> InfoInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new InfoInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.InfoInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the InfoInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.ShareInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.ShareInspector.md
deleted file mode 100644
index dd3aa0f..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.ShareInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.ShareInspector
----
-
-Share Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ShareInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ShareInspector:new(parent) -> ShareInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new ShareInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.ShareInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ShareInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.TextInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.TextInspector.md
deleted file mode 100644
index f7699b4..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.TextInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.TextInspector
----
-
-Text Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TextInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TextInspector:new(parent) -> TextInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new TextInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TextInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the TextInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.TitleInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.TitleInspector.md
deleted file mode 100644
index 392e2b6..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.TitleInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.TitleInspector
----
-
-Title Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TitleInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TitleInspector:new(parent) -> TitleInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new TitleInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TitleInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the TitleInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.TransitionInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.TransitionInspector.md
deleted file mode 100644
index e97cf47..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.TransitionInspector.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.TransitionInspector
----
-
-Transition Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [new](#new)
- * [parent](#parent)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TransitionInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TransitionInspector:new(parent) -> TransitionInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new TransitionInspector object |
-| **Parameters** | |
-| **Returns** | - A TransitionInspector object
|
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.TransitionInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the TransitionInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.VideoInspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.VideoInspector.md
deleted file mode 100644
index de4ae1b..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.VideoInspector.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector.VideoInspector
----
-
-Video Inspector Module.
-
-## API Overview
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [isShowing](#isshowing)
- * [new](#new)
- * [parent](#parent)
- * [show](#show)
- * [stabilization](#stabilization)
-
-## API Documentation
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.VideoInspector:app() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `cp.apple.finalcutpro` app table |
-| **Parameters** | |
-| **Returns** | - The application object as a table
|
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.VideoInspector:isShowing() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns `true` if the Video Inspector is showing otherwise `false` |
-| **Parameters** | |
-| **Returns** | - `true` if showing, otherwise `false`
|
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.VideoInspector:new(parent) -> VideoInspector object` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new VideoInspector object |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.VideoInspector:parent() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the VideoInspector's parent table |
-| **Parameters** | |
-| **Returns** | - The parent object as a table
|
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.VideoInspector:show() -> VideoInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Show's the Video Inspector |
-| **Parameters** | |
-| **Returns** | |
-
-#### [stabilization](#stabilization)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.VideoInspector:stabilization([value]) -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets or returns the stabilization setting for a clip. |
-| **Parameters** | - [value] - A boolean value you want to set the stabilization setting for the clip to.
|
-| **Returns** | - The value of the stabilization settings, or `nil` if an error has occurred.
|
-| **Notes** | - This method will open the Inspector if it's closed, and close it again after adjusting the stablization settings.
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.Inspector.md b/api/cp/cp.apple.finalcutpro.main.Inspector.md
deleted file mode 100644
index ccbbce9..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Inspector.md
+++ /dev/null
@@ -1,220 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Inspector
----
-
-Inspector
-
-## Submodules
- * [cp.apple.finalcutpro.main.Inspector.AudioInspector](cp.apple.finalcutpro.main.Inspector.AudioInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.ColorInspector](cp.apple.finalcutpro.main.Inspector.ColorInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.EffectInspector](cp.apple.finalcutpro.main.Inspector.EffectInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.GeneratorInspector](cp.apple.finalcutpro.main.Inspector.GeneratorInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.InfoInspector](cp.apple.finalcutpro.main.Inspector.InfoInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.ShareInspector](cp.apple.finalcutpro.main.Inspector.ShareInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.TextInspector](cp.apple.finalcutpro.main.Inspector.TextInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.TitleInspector](cp.apple.finalcutpro.main.Inspector.TitleInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.TransitionInspector](cp.apple.finalcutpro.main.Inspector.TransitionInspector.md)
- * [cp.apple.finalcutpro.main.Inspector.VideoInspector](cp.apple.finalcutpro.main.Inspector.VideoInspector.md)
-
-## API Overview
-* Constants - Useful values which cannot be changed
- * [INSPECTOR_TABS](#inspector_tabs)
-* Functions - API calls offered directly by the extension
- * [isShowing](#isshowing)
- * [matches](#matches)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
- * [audioInspector](#audioinspector)
- * [colorInspector](#colorinspector)
- * [effectInspector](#effectinspector)
- * [generatorInspector](#generatorinspector)
- * [hide](#hide)
- * [infoInspector](#infoinspector)
- * [new](#new)
- * [parent](#parent)
- * [selectedTab](#selectedtab)
- * [selectTab](#selecttab)
- * [shareInspector](#shareinspector)
- * [show](#show)
- * [textInspector](#textinspector)
- * [titleInspector](#titleinspector)
- * [transitionInspector](#transitioninspector)
- * [UI](#ui)
- * [videoInspector](#videoinspector)
-
-## API Documentation
-
-### Constants
-
-#### [INSPECTOR_TABS](#inspector_tabs)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.INSPECTOR_TABS -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of supported Inspector Tabs |
-
-### Functions
-
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.isShowing() -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns `true` if the Inspector is showing otherwise `false` |
-| **Parameters** | |
-| **Returns** | - `true` if showing, otherwise `false`
|
-
-#### [matches](#matches)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector.matches(element) -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks to see if an element matches what we think it should be. |
-| **Parameters** | - element - axuielementObject
|
-| **Returns** | - `true` if matches otherwise `false`
|
-
-### Methods
-
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:app() -> App` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the app instance representing Final Cut Pro. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [audioInspector](#audioinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:audioInspector() -> AudioInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the AudioInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [colorInspector](#colorinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:colorInspector() -> ColorInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the ColorInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [effectInspector](#effectinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:effectInspector() -> EffectInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the EffectInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [generatorInspector](#generatorinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:generatorInspector() -> GeneratorInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the GeneratorInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [hide](#hide)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:hide() -> Inspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Hides the inspector. |
-| **Parameters** | |
-| **Returns** | - The `Inspector` instance.
|
-
-#### [infoInspector](#infoinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:infoInspector() -> InfoInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the InfoInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:new(parent) -> Inspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new Inspector. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [parent](#parent)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:parent() -> Parent` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the parent of the Inspector. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [selectedTab](#selectedtab)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:selectedTab() -> string or nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the name of the selected inspector tab otherwise `nil`. |
-| **Parameters** | |
-| **Returns** | - A string of the selected tab, otherwise `nil` if the Inspector is closed or an error occurred.
|
-| **Notes** | - The tab strings can be:
- Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
-
-#### [selectTab](#selecttab)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:selectTab([tab]) -> boolean or nil` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Selects a tab in the inspector. |
-| **Parameters** | - [tab] - A string from the `cp.apple.finalcutpro.main.Inspector.INSPECTOR_TABS` table
|
-| **Returns** | - A string of the selected tab, otherwise `nil` if an error occurred.
|
-| **Notes** | - This method will open the Inspector if it's closed, and leave it open.
- Valid strings for `value` are as follows:
- Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
-
-#### [shareInspector](#shareinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:shareInspector() -> ShareInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the ShareInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:show([tab]) -> Inspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Shows the inspector. |
-| **Parameters** | - [tab] - A string from the `cp.apple.finalcutpro.main.Inspector.INSPECTOR_TABS` table
|
-| **Returns** | - The `Inspector` instance.
|
-| **Notes** | - Valid strings for `value` are as follows:
- Audio
- Color
- Effect
- Generator
- Info
- Share
- Text
- Title
- Transition
- Video
|
-
-#### [textInspector](#textinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:textInspector() -> TextInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the TextInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [titleInspector](#titleinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:titleInspector() -> TitleInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the TitleInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [transitionInspector](#transitioninspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:transitionInspector() -> TransitionInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the TransitionInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
-#### [UI](#ui)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:UI() -> axuielementObject` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Inspectors Accessibility Object |
-| **Parameters** | |
-| **Returns** | - An `axuielementObject` on `nil`
|
-
-#### [videoInspector](#videoinspector)
-| **Signature** | `cp.apple.finalcutpro.main.Inspector:videoInspector() -> VideoInspector` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the VideoInspector object. |
-| **Parameters** | |
-| **Returns** | |
-
diff --git a/api/cp/cp.apple.finalcutpro.main.KeywordEditor.md b/api/cp/cp.apple.finalcutpro.main.KeywordEditor.md
new file mode 100644
index 0000000..72662a9
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.KeywordEditor.md
@@ -0,0 +1,136 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.KeywordEditor
+---
+
+Keyword Editor Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [NUMBER_OF_SHORTCUTS](#number_of_shortcuts)
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [KeywordEditor](#keywordeditor)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [isShowing](#isshowing)
+ * [keyboardShortcuts](#keyboardshortcuts)
+ * [keywords](#keywords)
+ * [resetButton](#resetbutton)
+ * [shortcutButtons](#shortcutbuttons)
+ * [shortcutFields](#shortcutfields)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [parent](#parent)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [NUMBER_OF_SHORTCUTS](#number_of_shortcuts)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.NUMBER_OF_SHORTCUTS -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of Keyword Keyboard shortcuts available. |
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an `hs._asm.axuielement` object matches a Keyword Editor window |
+| **Parameters** | - element - the
hs._asm.axuielement object you want to check
|
+| **Returns** | true if a match otherwise false
|
+
+### Constructors
+
+#### [KeywordEditor](#keywordeditor)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor(parent) -> KeywordEditor object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new KeywordEditor object |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates whether or not the Keyword Editor is currently showing. |
+
+#### [keyboardShortcuts](#keyboardshortcuts)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.keyboardShortcuts ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `DisclosureTriangle` that shows/hides the keyboard shortcuts configuration. |
+
+#### [keywords](#keywords)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.keywords ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `TextField` that contains the current keywords. The value is a `table` of `string` values for each individual keyword. |
+
+#### [resetButton](#resetbutton)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.resetButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Button` that resets the current keywords to blank. |
+
+#### [shortcutButtons](#shortcutbuttons)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.shortcutButtons ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of keyboard shortcut `Button`s. The button for `Cmd+1` is accessed via `shortcutButtons[1]`, and so on. |
+
+#### [shortcutFields](#shortcutfields)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor.shortcutFields ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of keyboard shortcut `KeywordField`s. The field for `Cmd+1` is accessed via `shortcutFields[1]`, and so on. |
+
+### Methods
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` that hides the Keyword Editor. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` that shows the Keyword Editor. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor:hide() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Keyword Editor. |
+| **Parameters** | |
+| **Returns** | - KeywordEditor object
true if successful otherwise false
|
+
+#### [parent](#parent)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor:parent() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the KeywordEditor's parent table |
+| **Parameters** | |
+| **Returns** | - The parent object as a table
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordEditor:show() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Keyword Editor. |
+| **Parameters** | |
+| **Returns** | - KeywordEditor object
true if successful otherwise false
|
+
diff --git a/api/cp/cp.apple.finalcutpro.main.KeywordField.md b/api/cp/cp.apple.finalcutpro.main.KeywordField.md
new file mode 100644
index 0000000..23bc76a
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.KeywordField.md
@@ -0,0 +1,42 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.KeywordField
+---
+
+Keyword Text Field Module.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [KeywordField](#keywordfield)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [addKeyword](#addkeyword)
+ * [removeKeyword](#removekeyword)
+
+## API Documentation
+
+### Constructors
+
+#### [KeywordField](#keywordfield)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordField(parent, uiFinder) -> KeywordField` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs a new KeywordField. |
+| **Parameters** | - parent - the parent object.
- uiFinder - The
function or cp.prop that provides the axuielement.
|
+| **Returns** | |
+
+### Methods
+
+#### [addKeyword](#addkeyword)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordField:addKeyword(keyword) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to add the specified keyword. |
+| **Parameters** | - keyword - The keyword string to add.
|
+| **Returns** | true if the keyword was not present and added, otherwise false.
|
+
+#### [removeKeyword](#removekeyword)
+| **Signature** | `cp.apple.finalcutpro.main.KeywordField:removeKeyword(keyword) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to remove the specified keyword. |
+| **Parameters** | - keyword - The keyword string to remove.
|
+| **Returns** | true if the keyword was present and removed, otherwise false.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.main.LibrariesBrowser.md b/api/cp/cp.apple.finalcutpro.main.LibrariesBrowser.md
index 01fda4d..f09c79a 100644
--- a/api/cp/cp.apple.finalcutpro.main.LibrariesBrowser.md
+++ b/api/cp/cp.apple.finalcutpro.main.LibrariesBrowser.md
@@ -4,6 +4,329 @@
Libraries Browser Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [deselectAll](#deselectall)
+ * [indexOfClip](#indexofclip)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [LibrariesBrowser](#librariesbrowser)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [clipFiltering](#clipfiltering)
+ * [filmstrip](#filmstrip)
+ * [isFilmstripView](#isfilmstripview)
+ * [isFocused](#isfocused)
+ * [isListView](#islistview)
+ * [list](#list)
+ * [mainGroupUI](#maingroupui)
+ * [search](#search)
+ * [searchToggle](#searchtoggle)
+ * [toggleViewMode](#toggleviewmode)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [clips](#clips)
+ * [clipsUI](#clipsui)
+ * [doFindClips](#dofindclips)
+ * [doFindClipsTitled](#dofindclipstitled)
+ * [doHide](#dohide)
+ * [doOpenClipTitled](#doopencliptitled)
+ * [doSelectClipTitled](#doselectcliptitled)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [loadLayout](#loadlayout)
+ * [openClipTitled](#opencliptitled)
+ * [playhead](#playhead)
+ * [saveLayout](#savelayout)
+ * [selectAll](#selectall)
+ * [selectClip](#selectclip)
+ * [selectClipAt](#selectclipat)
+ * [selectClipTitled](#selectcliptitled)
+ * [selectedClips](#selectedclips)
+ * [selectedClipsUI](#selectedclipsui)
+ * [selectLibrary](#selectlibrary)
+ * [show](#show)
+ * [showClip](#showclip)
+ * [sidebar](#sidebar)
+ * [skimmingPlayhead](#skimmingplayhead)
## API Documentation
+### Functions
+
+#### [deselectAll](#deselectall)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:deselectAll() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Deselect all clips. |
+| **Parameters** | |
+| **Returns** | true if successful otherwise false.
|
+
+#### [indexOfClip](#indexofclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:indexOfClip(clip) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the index of a specific clip. |
+| **Parameters** | - clip - The
Clip you want to get the index of.
|
+| **Returns** | - The index or
nil if an error occurs.
|
+
+### Constructors
+
+#### [LibrariesBrowser](#librariesbrowser)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser(app) -> LibrariesBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `LibrariesBrowser` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
LibrariesBrowser object.
|
+
+### Fields
+
+#### [clipFiltering](#clipfiltering)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.clipFiltering ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Clip Filtering [PopUpButton](cp.ui.PopUpButton.md). |
+
+#### [filmstrip](#filmstrip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.filmstrip ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `LibrariesFilmstrip` object. |
+
+#### [isFilmstripView](#isfilmstripview)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.isFilmstripView ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the Library Browser is in 'filmstrip view' mode. |
+
+#### [isFocused](#isfocused)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.isFocused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the Libraries Browser is the current focus. |
+
+#### [isListView](#islistview)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.isListView ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the Library Browser is in 'list view' mode. |
+
+#### [list](#list)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.list ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [LibrariesList](cp.apple.finalcutpro.main.LibrariesList.md) object. |
+
+#### [mainGroupUI](#maingroupui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.mainGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the main group within the Libraries Browser, or `nil` if not available.. |
+
+#### [search](#search)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.search ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Search [TextField](cp.ui.TextField.md). |
+
+#### [searchToggle](#searchtoggle)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.searchToggle ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Search Toggle [Button](cp.ui.Button.md). |
+
+#### [toggleViewMode](#toggleviewmode)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.toggleViewMode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Toggle View Mode [Button](cp.ui.Button.md). |
+
+### Methods
+
+#### [clips](#clips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:clips(filterFn) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets clips using a custom filter. |
+| **Parameters** | - filterFn - A function to filter the UI results.
|
+| **Returns** | - A table of
Clip objects or nil if no clip UI could be found.
|
+
+#### [clipsUI](#clipsui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:clipsUI(filterFn) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets clip UIs using a custom filter. |
+| **Parameters** | - filterFn - A function to filter the UI results.
|
+| **Returns** | - A table of
axuielementObject objects or nil if no clip UI could be found.
|
+
+#### [doFindClips](#dofindclips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:doFindClips(filter) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will send each clip in the Libraries Browser matching the `filter` as an `onNext` signal. |
+| **Parameters** | - filter - a function which receives the Clip to check and returns
true or false.
|
+| **Returns** | |
+
+#### [doFindClipsTitled](#dofindclipstitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:doFindClipsTitled(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will send each clip in the Libraries Browser with the specified `title` as an `onNext` signal. |
+| **Parameters** | - title - The title string to check for.
|
+| **Returns** | |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will hide the Libraries Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doOpenClipTitled](#doopencliptitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:doOpenClipTitled(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to open the named clip in the Libraries Browser in the Timeline. |
+| **Parameters** | - title - The title of the clip to open.
|
+| **Returns** | - The
Statement to execute.
|
+
+#### [doSelectClipTitled](#doselectcliptitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:doSelectClipTitled(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will select the first clip with a matching `title`. |
+| **Parameters** | - title - The title to select.
|
+| **Returns** | - The
Statement ready to execute.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show the Libraries Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:hide() -> LibrariesBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hide the Libraries Browser. |
+| **Parameters** | |
+| **Returns** | - The
LibrariesBrowser object.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Libraries Browser layout. |
+| **Parameters** | - layout - A table containing the Libraries Browser layout settings - created using
cp.apple.finalcutpro.main.LibrariesBrowser:saveLayout().
|
+| **Returns** | |
+
+#### [openClipTitled](#opencliptitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:openClipTitled(name) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Open a clip with a specific title. |
+| **Parameters** | - name - The name of the clip you want to open.
|
+| **Returns** | true if successful, otherwise false.
|
+
+#### [playhead](#playhead)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:playhead() -> Playhead` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the Libraries Browser Playhead. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Libraries Browser layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Libraries Browser Layout.
|
+
+#### [selectAll](#selectall)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectAll([clips]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select all clips. |
+| **Parameters** | - clips - A optional table of
Clip objects.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClip](#selectclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectClip(clip) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects a clip. |
+| **Parameters** | - clip - The
Clip you want to select.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClipAt](#selectclipat)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectClipAt(index) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select clip at a specific index. |
+| **Parameters** | - index - A number of where the clip appears in the list.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClipTitled](#selectcliptitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectClipTitled(title) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select clip with a specific title. |
+| **Parameters** | - title - The title of a clip.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectedClips](#selectedclips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectedClips() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets selected clips. |
+| **Parameters** | |
+| **Returns** | - A table of
Clip objects or nil if no clips are selected.
|
+
+#### [selectedClipsUI](#selectedclipsui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectedClipsUI() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets selected clips UI's. |
+| **Parameters** | |
+| **Returns** | - A table of
axuielementObject objects or nil if no clips are selected.
|
+
+#### [selectLibrary](#selectlibrary)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:selectLibrary(...) -> Table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects a Library. |
+| **Parameters** | - ... - Libraries as string.
|
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:show() -> LibrariesBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Libraries Browser. |
+| **Parameters** | |
+| **Returns** | - The
LibrariesBrowser object.
|
+
+#### [showClip](#showclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:showClip(clip) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows a clip. |
+| **Parameters** | - clip - The
Clip you want to show.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [sidebar](#sidebar)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser.sidebar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The [LibrariesSidebar](cp.apple.finalcutpro.main.LibrariesSidebar.md) Table |
+
+#### [skimmingPlayhead](#skimmingplayhead)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesBrowser:skimmingPlayhead() -> Playhead` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the Libraries Browser Skimming Playhead. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.main.LibrariesFilmstrip.md b/api/cp/cp.apple.finalcutpro.main.LibrariesFilmstrip.md
index 1199611..51fc758 100644
--- a/api/cp/cp.apple.finalcutpro.main.LibrariesFilmstrip.md
+++ b/api/cp/cp.apple.finalcutpro.main.LibrariesFilmstrip.md
@@ -4,6 +4,167 @@
Libraries Filmstrip Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [clips](#clips)
+ * [clipsUI](#clipsui)
+ * [deselectAll](#deselectall)
+ * [indexOfClip](#indexofclip)
+ * [selectAll](#selectall)
+ * [selectClip](#selectclip)
+ * [selectClipAt](#selectclipat)
+ * [selectClipTitled](#selectcliptitled)
+ * [selectedClips](#selectedclips)
+ * [selectedClipsUI](#selectedclipsui)
+ * [showClip](#showclip)
+ * [showClipAt](#showclipat)
+ * [sortClips](#sortclips)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [playhead](#playhead)
+ * [skimmingPlayhead](#skimmingplayhead)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [clips](#clips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:clips(filterFn) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets clips using a custom filter. |
+| **Parameters** | - filterFn - A function to filter the UI results.
|
+| **Returns** | - A table of
Clip objects or nil if no clip UI could be found.
|
+
+#### [clipsUI](#clipsui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:clipsUI(filterFn) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets clip UIs using a custom filter. |
+| **Parameters** | - filterFn - A function to filter the UI results.
|
+| **Returns** | - A table of
axuielementObject objects or nil if no clip UI could be found.
|
+
+#### [deselectAll](#deselectall)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:deselectAll() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Deselect all clips. |
+| **Parameters** | |
+| **Returns** | true if successful otherwise false.
|
+
+#### [indexOfClip](#indexofclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:indexOfClip(clip) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the index of a specific clip. |
+| **Parameters** | - clip - The
Clip you want to get the index of.
|
+| **Returns** | - The index or
nil if an error occurs.
|
+
+#### [selectAll](#selectall)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:selectAll([clips]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Select all clips. |
+| **Parameters** | - clips - A optional table of
Clip objects.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClip](#selectclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip.selectClip(clip) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Selects a clip. |
+| **Parameters** | - clip - The
Clip you want to select.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClipAt](#selectclipat)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:selectClipAt(index) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Select clip at a specific index. |
+| **Parameters** | - index - A number of where the clip appears in the list.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClipTitled](#selectcliptitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:selectClipTitled(title) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Select clip with a specific title. |
+| **Parameters** | - title - The title of a clip.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectedClips](#selectedclips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:selectedClips() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets selected clips. |
+| **Parameters** | |
+| **Returns** | - A table of
Clip objects or nil if no clips are selected.
|
+
+#### [selectedClipsUI](#selectedclipsui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:selectedClipsUI() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets selected clips UI's. |
+| **Parameters** | |
+| **Returns** | - A table of
axuielementObject objects or nil if no clips are selected.
|
+
+#### [showClip](#showclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:showClip(clip) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Shows a clip. |
+| **Parameters** | - clip - The
Clip you want to show.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [showClipAt](#showclipat)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:showClipAt(index) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Shows a clip at a specific index. |
+| **Parameters** | - index - The index of the clip you want to show.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [sortClips](#sortclips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip.sortClips(a,b) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Determines if clip A is above clip B or not. |
+| **Parameters** | |
+| **Returns** | true if clip A is above clip B, otherwise false.
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip.new(app) -> LibrariesFilmstrip` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `LibrariesFilmstrip` instance. |
+| **Parameters** | - parent - The parent object
|
+| **Returns** | - A new
LibrariesFilmstrip object.
|
+
+### Fields
+
+#### [playhead](#playhead)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip.playhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Libraries Filmstrip Playhead. |
+
+#### [skimmingPlayhead](#skimmingplayhead)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip.skimmingPlayhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Libraries Filmstrip Skimming Playhead. |
+
+### Methods
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesFilmstrip:show() -> LibrariesFilmstrip` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Libraries Filmstrip. |
+| **Parameters** | |
+| **Returns** | LibrariesFilmstrip object
|
+
diff --git a/api/cp/cp.apple.finalcutpro.main.LibrariesList.md b/api/cp/cp.apple.finalcutpro.main.LibrariesList.md
index 23689f1..4ca2680 100644
--- a/api/cp/cp.apple.finalcutpro.main.LibrariesList.md
+++ b/api/cp/cp.apple.finalcutpro.main.LibrariesList.md
@@ -4,6 +4,186 @@
Libraries List Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [clips](#clips)
+ * [clipsUI](#clipsui)
+ * [deselectAll](#deselectall)
+ * [indexOfClip](#indexofclip)
+ * [selectAll](#selectall)
+ * [selectClip](#selectclip)
+ * [selectClipAt](#selectclipat)
+ * [selectClipTitled](#selectcliptitled)
+ * [selectedClips](#selectedclips)
+ * [selectedClipsUI](#selectedclipsui)
+ * [showClip](#showclip)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [LibrariesList](#librarieslist)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contents](#contents)
+ * [isFocused](#isfocused)
+ * [isShowing](#isshowing)
+ * [playerUI](#playerui)
+ * [playhead](#playhead)
+ * [skimmingPlayhead](#skimmingplayhead)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [columns](#columns)
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [clips](#clips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:clips(filterFn) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets clips using a custom filter. |
+| **Parameters** | - filterFn - A function to filter the UI results.
|
+| **Returns** | - A table of
Clip objects or nil if no clip UI could be found.
|
+
+#### [clipsUI](#clipsui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:clipsUI(filterFn) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets clip UIs using a custom filter. |
+| **Parameters** | - filterFn - A function to filter the UI results.
|
+| **Returns** | - A table of
axuielementObject objects or nil if no clip UI could be found.
|
+
+#### [deselectAll](#deselectall)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:deselectAll() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Deselect all clips. |
+| **Parameters** | |
+| **Returns** | true if successful otherwise false.
|
+
+#### [indexOfClip](#indexofclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:indexOfClip(clip) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the index of a specific clip. |
+| **Parameters** | - clip - The
Clip you want to get the index of.
|
+| **Returns** | - The index or
nil if an error occurs.
|
+
+#### [selectAll](#selectall)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:selectAll([clips]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Select all clips. |
+| **Parameters** | - clips - A optional table of
Clip objects.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClip](#selectclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:selectClip(clip) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Selects a clip. |
+| **Parameters** | - clip - The
Clip you want to select.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClipAt](#selectclipat)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:selectClipAt(index) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Select clip at a specific index. |
+| **Parameters** | - index - A number of where the clip appears in the list.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectClipTitled](#selectcliptitled)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:selectClipTitled(title) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Select clip with a specific title. |
+| **Parameters** | - title - The title of a clip.
|
+| **Returns** | true if successful otherwise false.
|
+
+#### [selectedClips](#selectedclips)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:selectedClips() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets selected clips. |
+| **Parameters** | |
+| **Returns** | - A table of
Clip objects or nil if no clips are selected.
|
+
+#### [selectedClipsUI](#selectedclipsui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:selectedClipsUI() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets selected clips UI's. |
+| **Parameters** | |
+| **Returns** | - A table of
axuielementObject objects or nil if no clips are selected.
|
+
+#### [showClip](#showclip)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:showClip(clip) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Shows a clip. |
+| **Parameters** | - clip - The
Clip you want to show.
|
+| **Returns** | true if successful otherwise false.
|
+
+### Constructors
+
+#### [LibrariesList](#librarieslist)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList(app) -> LibrariesList` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `LibrariesList` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
LibrariesList object.
|
+
+### Fields
+
+#### [contents](#contents)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList.contents ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Libraries List Contents UI. |
+
+#### [isFocused](#isfocused)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList.isFocused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Libraries List is currently focused within FCPX. |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Libraries List is showing on screen. |
+
+#### [playerUI](#playerui)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList.playerUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` for the player section of the Libraries List UI. |
+
+#### [playhead](#playhead)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList.playhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Libraries List Playhead. |
+
+#### [skimmingPlayhead](#skimmingplayhead)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList.skimmingPlayhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | the Libraries List Skimming Playhead. |
+
+### Methods
+
+#### [columns](#columns)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:columns() -> Columns` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the List View Columns object. |
+| **Parameters** | |
+| **Returns** | - A
AppearanceAndFiltering object.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesList:show() -> LibrariesList` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Libraries List. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.main.LibrariesSidebar.md b/api/cp/cp.apple.finalcutpro.main.LibrariesSidebar.md
new file mode 100644
index 0000000..60e76cf
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.LibrariesSidebar.md
@@ -0,0 +1,42 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.LibrariesSidebar
+---
+
+Libraries Sidebar Browser Module.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [LibrariesSidebar](#librariessidebar)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [selectActiveLibrary](#selectactivelibrary)
+ * [show](#show)
+
+## API Documentation
+
+### Constructors
+
+#### [LibrariesSidebar](#librariessidebar)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesSidebar(parent) -> LibrariesSidebar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `LibrariesSidebar` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
LibrariesSidebar object.
|
+
+### Methods
+
+#### [selectActiveLibrary](#selectactivelibrary)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesSidebar:selectActiveLibrary() -> LibrariesSidebar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects the active library. |
+| **Parameters** | |
+| **Returns** | - The
LibrariesSidebar object.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.LibrariesSidebar:show() -> LibrariesSidebar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Libraries Sidebar. |
+| **Parameters** | |
+| **Returns** | - The
LibrariesSidebar object.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.main.MediaBrowser.md b/api/cp/cp.apple.finalcutpro.main.MediaBrowser.md
index 5f23126..cdbfa9b 100644
--- a/api/cp/cp.apple.finalcutpro.main.MediaBrowser.md
+++ b/api/cp/cp.apple.finalcutpro.main.MediaBrowser.md
@@ -4,6 +4,203 @@
Media Browser Module.
## API Overview
+* Constants - Useful values which cannot be changed
+ * [GARAGE_BAND](#garage_band)
+ * [ITUNES](#itunes)
+ * [MAX_SECTIONS](#max_sections)
+ * [PHOTOS](#photos)
+ * [SOUND_EFFECTS](#sound_effects)
+ * [TITLE](#title)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [MediaBrowser](#mediabrowser)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [group](#group)
+ * [isShowing](#isshowing)
+ * [mainGroupUI](#maingroupui)
+ * [search](#search)
+ * [sidebar](#sidebar)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [hide](#hide)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [show](#show)
+ * [showGarageBand](#showgarageband)
+ * [showITunes](#showitunes)
+ * [showPhotos](#showphotos)
+ * [showSection](#showsection)
+ * [showSidebar](#showsidebar)
+ * [showSoundEffects](#showsoundeffects)
+ * [topCategoriesUI](#topcategoriesui)
## API Documentation
+### Constants
+
+#### [GARAGE_BAND](#garage_band)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.GARAGE_BAND -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Garage Band ID. |
+
+#### [ITUNES](#itunes)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.ITUNES -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | iTunes ID. |
+
+#### [MAX_SECTIONS](#max_sections)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.MAX_SECTIONS -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Maximum Sections. |
+
+#### [PHOTOS](#photos)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.PHOTOS -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Photos ID. |
+
+#### [SOUND_EFFECTS](#sound_effects)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.SOUND_EFFECTS -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Sound Effects ID. |
+
+#### [TITLE](#title)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.TITLE -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Photos & Audio Title. |
+
+### Constructors
+
+#### [MediaBrowser](#mediabrowser)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser(parent) -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Browser` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
MediaBrowser object.
|
+
+### Fields
+
+#### [group](#group)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.group ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The group PopUpButton. |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Media Browser is showing. |
+
+#### [mainGroupUI](#maingroupui)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.mainGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the main group UI for the Media Browser, or `nil` if not available. |
+
+#### [search](#search)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.search ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The search TextField. |
+
+#### [sidebar](#sidebar)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser.sidebar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Sidebar `Table`. |
+
+### Methods
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:hide() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hide the Media Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Media Browser layout. |
+| **Parameters** | - layout - A table containing the Media Browser layout settings - created using
cp.apple.finalcutpro.main.MediaBrowser:saveLayout().
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Media Browser layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Media Browser Layout.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:show() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Media Browser. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showGarageBand](#showgarageband)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:showGarageBand() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Garage Band Section. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showITunes](#showitunes)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:showITunes() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show iTunes Section. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showPhotos](#showphotos)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:showPhotos() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Photos Section. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showSection](#showsection)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:showSection(index) -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show a specific section. |
+| **Parameters** | - index - The index ID of the section you want to show as a number.
|
+| **Returns** | |
+
+#### [showSidebar](#showsidebar)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:showSidebar() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show the Media Browser Sidebar. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showSoundEffects](#showsoundeffects)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:showSoundEffects() -> MediaBrowser` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show Sound Effects Section. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [topCategoriesUI](#topcategoriesui)
+| **Signature** | `cp.apple.finalcutpro.main.MediaBrowser:topCategoriesUI() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Get the Top Categories UI. |
+| **Parameters** | |
+| **Returns** | axuielementObject object.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.main.Playhead.md b/api/cp/cp.apple.finalcutpro.main.Playhead.md
index dcd6425..8712503 100644
--- a/api/cp/cp.apple.finalcutpro.main.Playhead.md
+++ b/api/cp/cp.apple.finalcutpro.main.Playhead.md
@@ -4,18 +4,105 @@
Playhead Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [find](#find)
+ * [matches](#matches)
* Constructors - API calls which return an object, typically one that offers API methods
- * [new](#new)
+ * [Playhead](#playhead)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [center](#center)
+ * [currentViewer](#currentviewer)
+ * [frame](#frame)
+ * [isPersistent](#ispersistent)
+ * [position](#position)
+ * [timecode](#timecode)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [hide](#hide)
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [find](#find)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.find(containerUI, skimming) -> hs._asm.axuielement object | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds the playhead (either persistent or skimming) in the specified container. Defaults to persistent. |
+| **Parameters** | containerUI - The container UIskimming - Whether or not you want the skimming playhead as boolean.
|
+| **Returns** | - The playhead
hs._asm.axuielement object or nil if not found.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if a GUI element is the Playhead or not |
+| **Parameters** | element - The element you want to check
|
+| **Returns** | true if the element is the Playhead otherwise false
|
+
### Constructors
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.Playhead:new(parent, skimming, containerFn) -> Playhead` |
+#### [Playhead](#playhead)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead(parent[, skimming[, containerFn[, useEventViewer]]]) -> Playhead` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Constructs a new Playhead |
+| **Parameters** | - parent - The parent object
- skimming - (optional) if
true, this links to the 'skimming' playhead created under the mouse, if present. - containerUI - (optional) a
cp.prop which returns the container axuielement which contains the playheads. If not present, it will use the parent's UI element. - useEventViewer - (optional) if
true, this will use the Event Viewer's timecode, when available.
|
+| **Returns** | - The new
Playhead instance.
|
+
+### Fields
+
+#### [center](#center)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.center ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the centre point (`{x, y}`) of the playhead. |
+
+#### [currentViewer](#currentviewer)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.currentViewer ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Represents the current viewer for the playhead. This may be either the primary Viewer or the Event Viewer, |
+
+#### [frame](#frame)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.frame ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the frame of the playhead. |
+
+#### [isPersistent](#ispersistent)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.isPersistent ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the playhead persistent? |
+
+#### [position](#position)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.position ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the horizontal position of the playhead line, which may be different to the `x` position of the playhead. |
+
+#### [timecode](#timecode)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead.timecode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets and sets the current timecode. |
+
+### Methods
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead:hide() -> Playhead object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Playhead |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.Playhead:show() -> Playhead object` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Constructs a new Playhead |
-| **Parameters** | - * parent - The parent object
- * skimming - (optional) if `true`, this links to the 'skimming' playhead created under the mouse, if present.
- * containerFn - (optional) a function which returns the container axuielement which contains the playheads. If not present, it will use the parent's UI element.
|
-| **Returns** | - * The new `Playhead` instance.
|
+| **Type** | Method |
+| **Description** | Shows the Playhead |
+| **Parameters** | |
+| **Returns** | |
diff --git a/api/cp/cp.apple.finalcutpro.main.PrimaryToolbar.md b/api/cp/cp.apple.finalcutpro.main.PrimaryToolbar.md
new file mode 100644
index 0000000..bf362a2
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.PrimaryToolbar.md
@@ -0,0 +1,92 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.PrimaryToolbar
+---
+
+Timeline Toolbar.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [PrimaryToolbar](#primarytoolbar)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [backgroundTasksWindow](#backgroundtaskswindow)
+ * [browserShowing](#browsershowing)
+ * [extensions](#extensions)
+ * [inspectorShowing](#inspectorshowing)
+ * [keywordEditor](#keywordeditor)
+ * [mediaImport](#mediaimport)
+ * [shareButton](#sharebutton)
+ * [timelineShowing](#timelineshowing)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [PrimaryToolbar](#primarytoolbar)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar(parent) -> PrimaryToolbar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `PrimaryToolbar` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
PrimaryToolbar object.
|
+
+### Fields
+
+#### [backgroundTasksWindow](#backgroundtaskswindow)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.backgroundTasksWindow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` that will open the `BackgroundTasksWindow` dialog |
+
+#### [browserShowing](#browsershowing)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.browserShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` indicating if the `Browser` is showing |
+
+#### [extensions](#extensions)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.extensions ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Button` that will open the "Available Extensions" dialog, or trigger the only extension, if only one is installed. |
+
+#### [inspectorShowing](#inspectorshowing)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.inspectorShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` indicating if the Inspector is showing |
+
+#### [keywordEditor](#keywordeditor)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.keywordEditor ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` that will open the `KeywordEditor` dialog when checked. |
+
+#### [mediaImport](#mediaimport)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.mediaImport ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Button` that will open the `MediaImport` dialog |
+
+#### [shareButton](#sharebutton)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.shareButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Share Button. |
+
+#### [timelineShowing](#timelineshowing)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryToolbar.timelineShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` indicating if the `Timeline` is showing |
+
diff --git a/api/cp/cp.apple.finalcutpro.main.PrimaryWindow.md b/api/cp/cp.apple.finalcutpro.main.PrimaryWindow.md
index 38e3189..1d8106f 100644
--- a/api/cp/cp.apple.finalcutpro.main.PrimaryWindow.md
+++ b/api/cp/cp.apple.finalcutpro.main.PrimaryWindow.md
@@ -6,28 +6,31 @@ Primary Window Module.
## API Overview
* Functions - API calls offered directly by the extension
* [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [PrimaryWindow](#primarywindow)
* Fields - Variables which can only be accessed from an object returned by a constructor
- * [frame](#frame)
- * [isFullScreen](#isfullscreen)
- * [isShowing](#isshowing)
- * [UI](#ui)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [app](#app)
+ * [alert](#alert)
* [bottomGroupUI](#bottomgroupui)
* [browserGroupUI](#browsergroupui)
* [colorBoard](#colorboard)
+ * [doShow](#doshow)
+ * [frame](#frame)
+ * [hsWindow](#hswindow)
* [inspector](#inspector)
+ * [isFullScreen](#isfullscreen)
+ * [isShowing](#isshowing)
* [leftGroupUI](#leftgroupui)
- * [new](#new)
* [rightGroupUI](#rightgroupui)
* [rootGroupUI](#rootgroupui)
- * [show](#show)
* [timelineGroupUI](#timelinegroupui)
+ * [toolbar](#toolbar)
* [topGroupUI](#topgroupui)
- * [unwatch](#unwatch)
+ * [UI](#ui)
* [viewerGroupUI](#viewergroupui)
- * [watch](#watch)
* [window](#window)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [show](#show)
## API Documentation
@@ -36,164 +39,153 @@ Primary Window Module.
#### [matches](#matches)
| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.matches(w) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks to see if a window matches the PrimaryWindow requirements |
+| **Type** | Function |
+| **Description** | Checks to see if a window matches the PrimaryWindow requirements |
| **Parameters** | |
-| **Returns** | - `true` if matched otherwise `false`
|
+| **Returns** | true if matched otherwise false
|
-### Fields
+### Constructors
-#### [frame](#frame)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.frame ` |
+#### [PrimaryWindow](#primarywindow)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow(app) -> PrimaryWindow object` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The current position (x, y, width, height) of the window. |
+| **Type** | Constructor |
+| **Description** | Creates a new PrimaryWindow. |
+| **Parameters** | |
+| **Returns** | |
-#### [isFullScreen](#isfullscreen)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.isFullScreen ` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is `true` if the window is full-screen. |
+### Fields
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.isShowing ` |
+#### [alert](#alert)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.alert ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is `true` if the window is visible. |
+| **Type** | Field |
+| **Description** | Provides access to any 'Alert' windows on the PrimaryWindow. |
-#### [UI](#ui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.UI ` |
+#### [bottomGroupUI](#bottomgroupui)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:bottomGroupUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The `axuielement` for the window. |
+| **Type** | Field |
+| **Description** | Returns the bottom group UI as a `hs._asm.axuielement` object. |
-### Methods
+#### [browserGroupUI](#browsergroupui)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.browserGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the UI which contains the Browser. |
-#### [app](#app)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:app() -> hs.application` |
+#### [colorBoard](#colorboard)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.colorBoard ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the application the display belongs to. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The ColorBoard object. |
-#### [bottomGroupUI](#bottomgroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:bottomGroupUI() -> hs._asm.axuielement object` |
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:doShow() -> PrimaryWindow` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the bottom group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to show the Primary Window. |
+| **Returns** | - The
Statement, which resolves as either true or sends an error.
|
-#### [browserGroupUI](#browsergroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:browserGroupUI() -> hs._asm.axuielement object` |
+#### [frame](#frame)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.frame ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the browser group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | The current position (x, y, width, height) of the window. |
-#### [colorBoard](#colorboard)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:colorBoard() -> ColorBoard` |
+#### [hsWindow](#hswindow)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.hsWindow ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the ColorBoard object. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The `hs.window` instance for the window, or `nil` if it can't be found. |
#### [inspector](#inspector)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:inspector() -> Inspector` |
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.inspector ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the Inspector object. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The Inspector object. |
-#### [leftGroupUI](#leftgroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:leftGroupUI() -> hs._asm.axuielement object` |
+#### [isFullScreen](#isfullscreen)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.isFullScreen ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the left group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | Is `true` if the window is full-screen. |
-#### [new](#new)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:new(app) -> PrimaryWindow object` |
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.isShowing ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new PrimaryWindow. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | Is `true` if the window is visible. |
+
+#### [leftGroupUI](#leftgroupui)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.leftGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the left group UI as a `hs._asm.axuielement` object |
#### [rightGroupUI](#rightgroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:rightGroupUI() -> hs._asm.axuielement object` |
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.rightGroupUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the right group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | Returns the right group UI as a `hs._asm.axuielement` object. |
#### [rootGroupUI](#rootgroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:rootGroupUI() -> hs._asm.axuielement object` |
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.rootGroupUI() ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the top AXSplitGroup as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | Returns the top AXSplitGroup as a `hs._asm.axuielement` object |
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:show() -> PrimaryWindow` |
+#### [timelineGroupUI](#timelinegroupui)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.timelineGroupUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Attempts to focus the specified window. |
-| **Parameters** | |
-| **Returns** | - `true` if the window exists and
|
+| **Type** | Field |
+| **Description** | Returns the UI that contains the `Timeline`. |
-#### [timelineGroupUI](#timelinegroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:timelineGroupUI() -> hs._asm.axuielement object` |
+#### [toolbar](#toolbar)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.toolbar ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the timeline group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | The PrimaryToolbar element. |
#### [topGroupUI](#topgroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:topGroupUI() -> hs._asm.axuielement object` |
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.topGroupUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the top group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | Returns the top group UI as a `hs._asm.axuielement` object. |
-#### [unwatch](#unwatch)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:unwatch() -> string` |
+#### [UI](#ui)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.UI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Un-watches an event based on the specified ID. |
-| **Parameters** | - `id` - An ID has returned by `watch`
|
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The main `axuielement` for the window. May be `nil` if not currently available. |
#### [viewerGroupUI](#viewergroupui)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:viewerGroupUI() -> hs._asm.axuielement object` |
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.viewerGroupUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the viewer group UI as a `hs._asm.axuielement` object |
-| **Parameters** | |
-| **Returns** | - An `hs._asm.axuielement` object
|
+| **Type** | Field |
+| **Description** | Returns the UI that contains the `Viewer`. |
+
+#### [window](#window)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow.window ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Window` instance. |
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:watch() -> string` |
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:app() -> cp.apple.finalcutpro` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the command editor |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `show(window)` - Triggered when the window is shown.
- `hide(window)` - Triggered when the window is hidden.
- `move(window)` - Triggered when the window is moved.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Returns the application the display belongs to. |
+| **Parameters** | |
+| **Returns** | |
-#### [window](#window)
-| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:window() -> cp.ui.Window` |
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.PrimaryWindow:show() -> PrimaryWindow` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `Window` instance. |
+| **Type** | Method |
+| **Description** | Shows the Primary Window. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - The
PrimaryWindow instance.
|
diff --git a/api/cp/cp.apple.finalcutpro.main.SecondaryWindow.md b/api/cp/cp.apple.finalcutpro.main.SecondaryWindow.md
index 3da5eeb..c780241 100644
--- a/api/cp/cp.apple.finalcutpro.main.SecondaryWindow.md
+++ b/api/cp/cp.apple.finalcutpro.main.SecondaryWindow.md
@@ -4,28 +4,119 @@
Secondary Window Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [SecondaryWindow](#secondarywindow)
* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [browserGroupUI](#browsergroupui)
* [frame](#frame)
+ * [hsWindow](#hswindow)
+ * [isFullScreen](#isfullscreen)
+ * [isShowing](#isshowing)
+ * [rootGroupUI](#rootgroupui)
+ * [timelineGroupUI](#timelinegroupui)
+ * [viewerGroupUI](#viewergroupui)
* Methods - API calls which can only be made on an object returned by a constructor
- * [watch](#watch)
+ * [app](#app)
+ * [doShow](#doshow)
+ * [show](#show)
## API Documentation
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [SecondaryWindow](#secondarywindow)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow(app) -> SecondaryWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `SecondaryWindow` instance. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | - A new
SecondaryWindow object.
|
+
### Fields
+#### [browserGroupUI](#browsergroupui)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.browserGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The UI element that will contain the `Browser` if it's on the Secondary Window. |
+
#### [frame](#frame)
| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.frame ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The current position (x, y, width, height) of the window. |
+| **Type** | Field |
+| **Description** | The current position (x, y, width, height) of the window. |
+
+#### [hsWindow](#hswindow)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.hsWindow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `hs.window` instance for the window, or `nil` if it can't be found. |
+
+#### [isFullScreen](#isfullscreen)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.isFullScreen ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the window is full-screen. |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the window is visible. |
+
+#### [rootGroupUI](#rootgroupui)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.rootGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The root UI element on the window. |
+
+#### [timelineGroupUI](#timelinegroupui)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.timelineGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The UI element that will contain the `Timeline` if it's on the Secondary Window. |
+
+#### [viewerGroupUI](#viewergroupui)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow.viewerGroupUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The UI element that will contain the `Viewer` if it's on the Secondary Window. |
### Methods
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow:watch() -> bool` |
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow:app() -> App` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the app instance representing Final Cut Pro. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement) that shows the Secondary Window. |
+| **Parameters** | |
+| **Returns** | - The
SecondaryWindow object.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.main.SecondaryWindow:show() -> SecondaryWindow` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the command editor |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- `show(window)` - Triggered when the window is shown.
- `hide(window)` - Triggered when the window is hidden.
- `move(window)` - Triggered when the window is moved.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Show the Secondary Window. |
+| **Parameters** | |
+| **Returns** | - The
SecondaryWindow object.
|
diff --git a/api/cp/cp.apple.finalcutpro.main.Timeline.md b/api/cp/cp.apple.finalcutpro.main.Timeline.md
deleted file mode 100644
index 886c613..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Timeline.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Timeline
----
-
-Timeline Module.
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.finalcutpro.main.TimelineAppearance.md b/api/cp/cp.apple.finalcutpro.main.TimelineAppearance.md
deleted file mode 100644
index 09199ab..0000000
--- a/api/cp/cp.apple.finalcutpro.main.TimelineAppearance.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.TimelineAppearance
----
-
-Timeline Appearance Module.
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.finalcutpro.main.TimelineContents.md b/api/cp/cp.apple.finalcutpro.main.TimelineContents.md
deleted file mode 100644
index affe082..0000000
--- a/api/cp/cp.apple.finalcutpro.main.TimelineContents.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.TimelineContents
----
-
-Timeline Contents Module.
-
-## API Overview
-* Functions - API calls offered directly by the extension
- * [clipsUI](#clipsui)
- * [playheadClipsUI](#playheadclipsui)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [rangeSelectionUI](#rangeselectionui)
- * [selectedClipsUI](#selectedclipsui)
-
-## API Documentation
-
-### Functions
-
-#### [clipsUI](#clipsui)
-| **Signature** | `cp.apple.finalcutpro.main.TimelineContents:clipsUI(expandedGroups, filterFn) -> table of axuielements` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a table containing the list of clips in the Timeline. |
-| **Parameters** | - expandGroups - (optional) if true, expand AXGroups to include contained AXLayoutItems
- filterFn - (optional) if provided, the function will be called to check each clip
|
-| **Returns** | - The table of axuielements that match the conditions
|
-
-#### [playheadClipsUI](#playheadclipsui)
-| **Signature** | `cp.apple.finalcutpro.main.TimelineContents:playheadClipsUI(expandedGroups, filterFn) -> table of axuielements` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a table array containing the list of clips in the Timeline under the playhead, ordered with the |
-| **Parameters** | - expandGroups - (optional) if true, expand AXGroups to include contained AXLayoutItems
- filterFn - (optional) if provided, the function will be called to check each clip
|
-| **Returns** | - The table of axuielements that match the conditions
|
-
-### Methods
-
-#### [rangeSelectionUI](#rangeselectionui)
-| **Signature** | `cp.apple.finalcutpro.main.TimelineContents:rangeSelectionUI() -> axuielements` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the UI for the current 'Range Selection', if present. |
-| **Parameters** | |
-| **Returns** | - The 'Range Selection' UI or `nil`
|
-
-#### [selectedClipsUI](#selectedclipsui)
-| **Signature** | `cp.apple.finalcutpro.main.TimelineContents:selectedClipsUI(expandedGroups, filterFn) -> table of axuielements` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table containing the list of selected clips. |
-| **Parameters** | - expandGroups - (optional) if true, expand AXGroups to include contained AXLayoutItems
- filterFn - (optional) if provided, the function will be called to check each clip
|
-| **Returns** | - The table of selected axuielements that match the conditions
|
-
diff --git a/api/cp/cp.apple.finalcutpro.main.TimelineToolbar.md b/api/cp/cp.apple.finalcutpro.main.TimelineToolbar.md
deleted file mode 100644
index 4780ac7..0000000
--- a/api/cp/cp.apple.finalcutpro.main.TimelineToolbar.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.TimelineToolbar
----
-
-Timeline Toolbar
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.finalcutpro.main.TranscodeMedia.md b/api/cp/cp.apple.finalcutpro.main.TranscodeMedia.md
new file mode 100644
index 0000000..94d9008
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.main.TranscodeMedia.md
@@ -0,0 +1,40 @@
+# [docs](index.md) » cp.apple.finalcutpro.main.TranscodeMedia
+---
+
+Represents the Transcode Media sheet.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [cancel](#cancel)
+ * [createOptimizedMedia](#createoptimizedmedia)
+ * [createProxyMedia](#createproxymedia)
+ * [ok](#ok)
+
+## API Documentation
+
+### Fields
+
+#### [cancel](#cancel)
+| **Signature** | `cp.apple.finalcutpro.main.TranscodeMedia.cancel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Cancel" button, as a [Button](cp.ui.Button.md) |
+
+#### [createOptimizedMedia](#createoptimizedmedia)
+| **Signature** | `cp.apple.finalcutpro.main.TranscodeMedia.createOptimizedMedia ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Create Optimized Media" check box, as a [CheckBox](cp.ui.CheckBox.md) |
+
+#### [createProxyMedia](#createproxymedia)
+| **Signature** | `cp.apple.finalcutpro.main.TranscodeMedia.createProxyMedia ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Create Proxy Media" check box, as a [CheckBox](cp.ui.CheckBox.md) |
+
+#### [ok](#ok)
+| **Signature** | `cp.apple.finalcutpro.main.TranscodeMedia.ok ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "OK" button, as a [Button](cp.ui.Button.md) |
+
diff --git a/api/cp/cp.apple.finalcutpro.main.Viewer.md b/api/cp/cp.apple.finalcutpro.main.Viewer.md
deleted file mode 100644
index 23b01c5..0000000
--- a/api/cp/cp.apple.finalcutpro.main.Viewer.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.main.Viewer
----
-
-Viewer Module.
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.finalcutpro.md b/api/cp/cp.apple.finalcutpro.md
index 5b6b3b0..a7e2e6a 100644
--- a/api/cp/cp.apple.finalcutpro.md
+++ b/api/cp/cp.apple.finalcutpro.md
@@ -3,45 +3,40 @@
Represents the Final Cut Pro application, providing functions that allow different tasks to be accomplished.
-This module provides an API to work with the FCPX application. There are a couple of types of files:
-
-* `init.lua` - the main module that gets imported.
-* `axutils.lua` - some utility functions for working with `axuielement` objects.
-
Generally, you will `require` the `cp.apple.finalcutpro` module to import it, like so:
```lua
-local fcp = require("cp.apple.finalcutpro")
+local fcp = require "cp.apple.finalcutpro"
```
Then, there are the `UpperCase` files, which represent the application itself:
-* `MenuBar` - The main menu bar.
+* `MenuBar` - The main menu bar.
* `prefs/PreferencesWindow` - The preferences window.
* etc...
The `fcp` variable is the root application. It has functions which allow you to perform tasks or access parts of the UI. For example, to open the `Preferences` window, you can do this:
```lua
-fcp:preferencesWindow():show()
+fcp.preferencesWindow:show()
```
-In general, as long as FCPX is running, actions can be performed directly, and the API will perform the required operations to achieve it. For example, to toggle the 'Create Optimized Media' checkbox in the 'Import' section of the 'Preferences' window, you can simply do this:
+In general, as long as Final Cut Pro is running, actions can be performed directly, and the API will perform the required operations to achieve it. For example, to toggle the 'Create Optimized Media' checkbox in the 'Import' section of the 'Preferences' window, you can simply do this:
```lua
-fcp:preferencesWindow():importPanel():toggleCreateOptimizedMedia()
+fcp.preferencesWindow.importPanel:toggleCreateOptimizedMedia()
```
The API will automatically open the `Preferences` window, navigate to the 'Import' panel and toggle the checkbox.
The `UpperCase` classes also have a variety of `UI` methods. These will return the `axuielement` for the relevant GUI element, if it is accessible. If not, it will return `nil`. These allow direct interaction with the GUI if necessary. It's most useful when adding new functions to `UpperCase` files for a particular element.
-This can also be used to 'wait' for an element to be visible before performing a task. For example, if you need to wait for the `Preferences` window to finish loading before doing something else, you can do this with the `cp.just` library:
+This can also be used to 'wait' for an element to be visible before performing a task. For example, if you need to wait for the `Preferences` window to finish loading before doing something else, you can do this with the [just](cp.just.md) library:
```lua
-local just = require("cp.just")
+local just = require "cp.just"
-local prefsWindow = fcp:preferencesWindow()
+local prefsWindow = fcp.preferencesWindow
local prefsUI = just.doUntil(function() return prefsWindow:UI() end)
@@ -57,26 +52,36 @@ By using the `just` library, we can do a loop waiting until the function returns
Of course, we have a specific support function for that already, so you could do this instead:
```lua
-if fcp:preferencesWindow():isShowing() then
+if fcp.preferencesWindow:isShowing() then
-- it's open!
else
-- it's closed!
end
```
+**Delegates to:** [app](cp.apple.finalcutpro.app.md), [menu](cp.app.menu.md)
+
+Note: All values/methods/props from delegates can be accessed directly from the `cp.apple.finalcutpro` instance. For example:
+
+```lua
+fcp.app:UI() == fcp:UI() -- the same `cp.prop` result.
+```
+
## Submodules
- * [cp.apple.finalcutpro.MenuBar](cp.apple.finalcutpro.MenuBar.md)
- * [cp.apple.finalcutpro.WindowWatcher](cp.apple.finalcutpro.WindowWatcher.md)
+ * [cp.apple.finalcutpro.app](cp.apple.finalcutpro.app.md)
+ * [cp.apple.finalcutpro.browser](cp.apple.finalcutpro.browser.md)
* [cp.apple.finalcutpro.cmd](cp.apple.finalcutpro.cmd.md)
* [cp.apple.finalcutpro.content](cp.apple.finalcutpro.content.md)
* [cp.apple.finalcutpro.export](cp.apple.finalcutpro.export.md)
- * [cp.apple.finalcutpro.ids](cp.apple.finalcutpro.ids.md)
* [cp.apple.finalcutpro.import](cp.apple.finalcutpro.import.md)
- * [cp.apple.finalcutpro.keycodes](cp.apple.finalcutpro.keycodes.md)
+ * [cp.apple.finalcutpro.inspector](cp.apple.finalcutpro.inspector.md)
* [cp.apple.finalcutpro.main](cp.apple.finalcutpro.main.md)
+ * [cp.apple.finalcutpro.menu](cp.apple.finalcutpro.menu.md)
* [cp.apple.finalcutpro.plugins](cp.apple.finalcutpro.plugins.md)
* [cp.apple.finalcutpro.prefs](cp.apple.finalcutpro.prefs.md)
- * [cp.apple.finalcutpro.windowfilter](cp.apple.finalcutpro.windowfilter.md)
+ * [cp.apple.finalcutpro.strings](cp.apple.finalcutpro.strings.md)
+ * [cp.apple.finalcutpro.timeline](cp.apple.finalcutpro.timeline.md)
+ * [cp.apple.finalcutpro.viewer](cp.apple.finalcutpro.viewer.md)
## API Overview
* Constants - Useful values which cannot be changed
@@ -84,657 +89,748 @@ end
* [ALLOWED_IMPORT_EXTENSIONS](#allowed_import_extensions)
* [ALLOWED_IMPORT_IMAGE_EXTENSIONS](#allowed_import_image_extensions)
* [ALLOWED_IMPORT_VIDEO_EXTENSIONS](#allowed_import_video_extensions)
- * [BUNDLE_ID](#bundle_id)
* [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
+ * [EVENT_DESCRIPTION_PATH](#event_description_path)
* [FLEXO_LANGUAGES](#flexo_languages)
* [PASTEBOARD_UTI](#pasteboard_uti)
- * [PREFS_PATH](#prefs_path)
- * [PREFS_PLIST_FILE](#prefs_plist_file)
- * [PREFS_PLIST_PATH](#prefs_plist_path)
- * [SUPPORTED_LANGUAGES](#supported_languages)
+ * [preferences](#preferences)
+ * [WORKSPACES_PATH](#workspaces_path)
+* Variables - Configurable values
+ * [activeCommandSet](#activecommandset)
+ * [customWorkspaces](#customworkspaces)
+ * [openAndSavePanelDefaultPath](#openandsavepaneldefaultpath)
+ * [selectedWorkspace](#selectedworkspace)
* Functions - API calls offered directly by the extension
- * [init](#init)
- * [reset](#reset)
+ * [commandSet](#commandset)
+ * [matches](#matches)
+ * [matches](#matches)
+ * [userCommandSetPath](#usercommandsetpath)
+ * [workflowExtensions](#workflowextensions)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Color](#color)
+ * [TranscodeMedia](#transcodemedia)
* Fields - Variables which can only be accessed from an object returned by a constructor
- * [colorInspectorSupported](#colorinspectorsupported)
- * [currentLanguage](#currentlanguage)
- * [getVersion](#getversion)
- * [isFrontmost](#isfrontmost)
- * [isInstalled](#isinstalled)
- * [isModalDialogOpen](#ismodaldialogopen)
- * [isRunning](#isrunning)
- * [isShowing](#isshowing)
- * [isSupported](#issupported)
- * [isUnsupported](#isunsupported)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [application](#application)
+ * [activeCommandSetPath](#activecommandsetpath)
+ * [alert](#alert)
+ * [audioEnhancements](#audioenhancements)
+ * [audioLanes](#audiolanes)
+ * [backgroundTasksDialog](#backgroundtasksdialog)
* [browser](#browser)
+ * [color](#color)
* [colorBoard](#colorboard)
- * [colorInspector](#colorinspector)
+ * [colorCorrection](#colorcorrection)
* [commandEditor](#commandeditor)
+ * [contentUI](#contentui)
+ * [contentUI](#contentui)
+ * [deselectAll](#deselectall)
+ * [effects](#effects)
* [effects](#effects)
* [eventViewer](#eventviewer)
* [exportDialog](#exportdialog)
+ * [findAndReplaceTitleText](#findandreplacetitletext)
* [fullScreenWindow](#fullscreenwindow)
* [generators](#generators)
- * [getActiveCommandSet](#getactivecommandset)
- * [getActiveCommandSetPath](#getactivecommandsetpath)
- * [getBundleID](#getbundleid)
- * [getCommandSet](#getcommandset)
- * [getCommandShortcuts](#getcommandshortcuts)
- * [getDefaultCommandSetPath](#getdefaultcommandsetpath)
- * [getFlexoLanguages](#getflexolanguages)
- * [getPasteboardUTI](#getpasteboarduti)
- * [getPath](#getpath)
- * [getPreference](#getpreference)
- * [getPreferences](#getpreferences)
- * [getSupportedLanguage](#getsupportedlanguage)
- * [getSupportedLanguages](#getsupportedlanguages)
- * [hide](#hide)
- * [importXML](#importxml)
* [inspector](#inspector)
- * [isSupportedLanguage](#issupportedlanguage)
- * [keysWithString](#keyswithstring)
- * [launch](#launch)
+ * [inspectorUnits](#inspectorunits)
+ * [isFrontmost](#isfrontmost)
+ * [isInstalled](#isinstalled)
+ * [isModalDialogOpen](#ismodaldialogopen)
+ * [isPlaying](#isplaying)
+ * [isPlaying](#isplaying)
+ * [isRunning](#isrunning)
+ * [isShowing](#isshowing)
+ * [isSupported](#issupported)
+ * [isUnsupported](#isunsupported)
+ * [keywordEditor](#keywordeditor)
* [libraries](#libraries)
* [media](#media)
* [mediaImport](#mediaimport)
- * [menuBar](#menubar)
- * [performShortcut](#performshortcut)
- * [plugins](#plugins)
+ * [pan](#pan)
* [preferencesWindow](#preferenceswindow)
+ * [preset](#preset)
* [primaryWindow](#primarywindow)
- * [quit](#quit)
- * [restart](#restart)
- * [scanPlugins](#scanplugins)
+ * [resetDialogWarnings](#resetdialogwarnings)
* [secondaryWindow](#secondarywindow)
- * [selectMenu](#selectmenu)
- * [setPreference](#setpreference)
- * [show](#show)
- * [string](#string)
+ * [textArea](#textarea)
+ * [textLayerLeft](#textlayerleft)
+ * [textLayerRight](#textlayerright)
+ * [timeDisplay](#timedisplay)
* [timeline](#timeline)
+ * [toolbar](#toolbar)
+ * [transcodeMedia](#transcodemedia)
* [transitions](#transitions)
* [UI](#ui)
- * [unwatch](#unwatch)
+ * [validateAudioUnits](#validateaudiounits)
* [viewer](#viewer)
- * [watch](#watch)
+ * [volume](#volume)
* [windowsUI](#windowsui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [activeLibraryPaths](#activelibrarypaths)
+ * [closeLibrary](#closelibrary)
+ * [defaultCommandSetPath](#defaultcommandsetpath)
+ * [doShortcut](#doshortcut)
+ * [getCommandShortcuts](#getcommandshortcuts)
+ * [getPath](#getpath)
+ * [hide](#hide)
+ * [importXML](#importxml)
+ * [isSupportedLocale](#issupportedlocale)
+ * [keysWithString](#keyswithstring)
+ * [launch](#launch)
+ * [openLibrary](#openlibrary)
+ * [plugins](#plugins)
+ * [quit](#quit)
+ * [recentLibraryNames](#recentlibrarynames)
+ * [recentLibraryPaths](#recentlibrarypaths)
+ * [scanPlugins](#scanplugins)
+ * [selectLibrary](#selectlibrary)
+ * [show](#show)
+ * [string](#string)
+ * [userCommandSets](#usercommandsets)
## API Documentation
### Constants
#### [ALLOWED_IMPORT_AUDIO_EXTENSIONS](#allowed_import_audio_extensions)
-| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_AUDIO_EXTENSIONS` |
+| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_AUDIO_EXTENSIONS -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of audio file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of audio file extensions Final Cut Pro can import. |
#### [ALLOWED_IMPORT_EXTENSIONS](#allowed_import_extensions)
-| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_EXTENSIONS` |
+| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_EXTENSIONS -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of all file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of all file extensions Final Cut Pro can import. |
#### [ALLOWED_IMPORT_IMAGE_EXTENSIONS](#allowed_import_image_extensions)
-| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_IMAGE_EXTENSIONS` |
+| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_IMAGE_EXTENSIONS -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of image file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of image file extensions Final Cut Pro can import. |
#### [ALLOWED_IMPORT_VIDEO_EXTENSIONS](#allowed_import_video_extensions)
-| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_VIDEO_EXTENSIONS` |
+| **Signature** | `cp.apple.finalcutpro.ALLOWED_IMPORT_VIDEO_EXTENSIONS -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of video file extensions Final Cut Pro can import. |
+| **Type** | Constant |
+| **Description** | Table of video file extensions Final Cut Pro can import. |
-#### [BUNDLE_ID](#bundle_id)
-| **Signature** | `cp.apple.finalcutpro.BUNDLE_ID` |
+#### [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
+| **Signature** | `cp.apple.finalcutpro.EARLIEST_SUPPORTED_VERSION -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Final Cut Pro's Bundle ID |
+| **Type** | Constant |
+| **Description** | The earliest version of Final Cut Pro supported by this module. |
-#### [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
-| **Signature** | `cp.apple.finalcutpro.EARLIEST_SUPPORTED_VERSION` |
+#### [EVENT_DESCRIPTION_PATH](#event_description_path)
+| **Signature** | `cp.apple.finalcutpro.EVENT_DESCRIPTION_PATH -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The earliest version of Final Cut Pro supported by this module. |
+| **Type** | Constant |
+| **Description** | The Event Description Path. |
#### [FLEXO_LANGUAGES](#flexo_languages)
-| **Signature** | `cp.apple.finalcutpro.FLEXO_LANGUAGES` |
+| **Signature** | `cp.apple.finalcutpro.FLEXO_LANGUAGES -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of Final Cut Pro's supported Languages for the Flexo Framework |
+| **Type** | Constant |
+| **Description** | Table of Final Cut Pro's supported Languages for the Flexo Framework |
#### [PASTEBOARD_UTI](#pasteboard_uti)
-| **Signature** | `cp.apple.finalcutpro.PASTEBOARD_UTI` |
+| **Signature** | `cp.apple.finalcutpro.PASTEBOARD_UTI -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Final Cut Pro's Pasteboard UTI |
+| **Type** | Constant |
+| **Description** | Final Cut Pro's Pasteboard UTI |
-#### [PREFS_PATH](#prefs_path)
-| **Signature** | `cp.apple.finalcutpro.PREFS_PATH` |
+#### [preferences](#preferences)
+| **Signature** | `cp.apple.finalcutpro.preferences ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Final Cut Pro's Preferences Path |
+| **Type** | Constant |
+| **Description** | The `cp.app.prefs` for Final Cut Pro. |
-#### [PREFS_PLIST_FILE](#prefs_plist_file)
-| **Signature** | `cp.apple.finalcutpro.PREFS_PLIST_FILE` |
+#### [WORKSPACES_PATH](#workspaces_path)
+| **Signature** | `cp.apple.finalcutpro.WORKSPACES_PATH -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Final Cut Pro's Preferences File |
+| **Type** | Constant |
+| **Description** | The path to the custom workspaces folder. |
-#### [PREFS_PLIST_PATH](#prefs_plist_path)
-| **Signature** | `cp.apple.finalcutpro.PREFS_PLIST_PATH` |
+### Variables
+
+#### [activeCommandSet](#activecommandset)
+| **Signature** | `cp.apple.finalcutpro.activeCommandSet ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Contins the 'Active Command Set' as a `table`. The result is cached, but |
+
+#### [customWorkspaces](#customworkspaces)
+| **Signature** | `cp.apple.finalcutpro:customWorkspaces ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Final Cut Pro's Preferences Path |
+| **Type** | Variable |
+| **Description** | A table containing the display names of all the user created custom workspaces. |
-#### [SUPPORTED_LANGUAGES](#supported_languages)
-| **Signature** | `cp.apple.finalcutpro.SUPPORTED_LANGUAGES` |
+#### [openAndSavePanelDefaultPath](#openandsavepaneldefaultpath)
+| **Signature** | `cp.apple.finalcutpro:openAndSavePanelDefaultPath ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of Final Cut Pro's supported Languages |
+| **Type** | Variable |
+| **Description** | A string containing the default open/save panel path. |
+
+#### [selectedWorkspace](#selectedworkspace)
+| **Signature** | `cp.apple.finalcutpro.selectedWorkspace ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | The currently selected workspace name. The result is cached, but updated |
### Functions
-#### [init](#init)
-| **Signature** | `cp.apple.finalcutpro:init() -> App` |
+#### [commandSet](#commandset)
+| **Signature** | `cp.apple.finalcutpro.commandSet(path) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Initialises the app instance representing Final Cut Pro. |
+| **Type** | Function |
+| **Description** | Gets the Command Set at the specified path as a table. |
+| **Parameters** | path - The path to the Command Set.
|
+| **Returns** | - The Command Set as a table, or
nil if there was a problem.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.main.CommandEditor.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.viewer.TranscodeMedia.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is an `TranscodeMedia` instance. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches the pattern for a Viewer TranscodeMedia.
|
+
+#### [userCommandSetPath](#usercommandsetpath)
+| **Signature** | `cp.apple.finalcutpro.userCommandSetPath() -> string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the path where User Command Set files are stored. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - A path as a string or
nil if the folder doesn't exist.
|
-#### [reset](#reset)
-| **Signature** | `cp.apple.finalcutpro:reset() -> none` |
+#### [workflowExtensions](#workflowextensions)
+| **Signature** | `cp.apple.finalcutpro.workflowExtensions() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Resets the language cache |
+| **Type** | Function |
+| **Description** | Gets the names of all the installed Workflow Extensions. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - A table of Workflow Extension names
|
-### Fields
+### Constructors
-#### [colorInspectorSupported](#colorinspectorsupported)
-| **Signature** | `cp.apple.finalcutpro:colorInspectorSupported ` |
+#### [Color](#color)
+| **Signature** | `cp.apple.finalcutpro.main.Color(app) -> Color` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is the Color Inspector supported in the installed version of Final Cut Pro? |
+| **Type** | Constructor |
+| **Description** | Creates a new `Color` instance. |
+| **Parameters** | - app - The Final Cut Pro app instance.
|
+| **Returns** | |
-#### [currentLanguage](#currentlanguage)
-| **Signature** | `cp.apple.finalcutpro.currentLanguage ` |
+#### [TranscodeMedia](#transcodemedia)
+| **Signature** | `cp.apple.finalcutpro.viewer.TranscodeMedia(viewer)` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The current language the FCPX is displayed in. |
+| **Type** | Constructor |
+| **Description** | Creates a new `TranscodeMedia` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | |
+
+### Fields
-#### [getVersion](#getversion)
-| **Signature** | `cp.apple.finalcutpro.getVersion ` |
+#### [activeCommandSetPath](#activecommandsetpath)
+| **Signature** | `cp.apple.finalcutpro.activeCommandSetPath ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Version of Final Cut Pro as string. |
-| **Parameters** | |
-| **Returns** | - Version as string or `nil` if Final Cut Pro cannot be found.
|
-| **Notes** | - If Final Cut Pro is running it will get the version of the active Final Cut Pro application as a string, otherwise, it will use `hs.application.infoForBundleID()` to find the version.
|
+| **Type** | Field |
+| **Description** | Gets the 'Active Command Set' value from the Final Cut Pro preferences |
-#### [isFrontmost](#isfrontmost)
-| **Signature** | `cp.apple.finalcutpro:isFrontmost ` |
+#### [alert](#alert)
+| **Signature** | `cp.apple.finalcutpro.alert ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is Final Cut Pro Frontmost? |
+| **Type** | Field |
+| **Description** | Provides basic access to any 'alert' dialog windows in the app. |
-#### [isInstalled](#isinstalled)
-| **Signature** | `cp.apple.finalcutpro.isInstalled ` |
+#### [audioEnhancements](#audioenhancements)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.VideoInspector.audioEnhancements ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is any version of Final Cut Pro Installed? |
+| **Type** | Field |
+| **Description** | Audio Enhancements |
-#### [isModalDialogOpen](#ismodaldialogopen)
-| **Signature** | `cp.apple.finalcutpro:isModalDialogOpen ` |
+#### [audioLanes](#audiolanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.audioLanes ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is a modal dialog currently open? |
+| **Type** | Field |
+| **Description** | Indicates if audio lanes are currently showing. May be set to ensure it is showing or hidden. |
-#### [isRunning](#isrunning)
-| **Signature** | `cp.apple.finalcutpro.isRunning ` |
+#### [backgroundTasksDialog](#backgroundtasksdialog)
+| **Signature** | `cp.apple.finalcutpro.backgroundTasksDialog ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is Final Cut Pro Running? |
+| **Type** | Field |
+| **Description** | The [BackgroundTasksDialog](cp.apple.finalcutpro.main.BackgroundTasksDialog.md) dialog window. |
-#### [isShowing](#isshowing)
-| **Signature** | `cp.apple.finalcutpro.isShowing ` |
+#### [browser](#browser)
+| **Signature** | `cp.apple.finalcutpro.browser ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is Final Cut visible on screen? |
+| **Type** | Field |
+| **Description** | The [Browser](cp.apple.finalcutpro.main.Browser.md) instance, whether it is in the primary or secondary window. |
-#### [isSupported](#issupported)
-| **Signature** | `cp.apple.finalcutpro.isSupported ` |
+#### [color](#color)
+| **Signature** | `cp.apple.finalcutpro.color ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is a supported version of Final Cut Pro installed? |
+| **Type** | Field |
+| **Description** | The ColorInspector instance from the primary window |
-#### [isUnsupported](#isunsupported)
-| **Signature** | `cp.apple.finalcutpro.isUnsupported ` |
+#### [colorBoard](#colorboard)
+| **Signature** | `cp.apple.finalcutpro.colorBoard ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is an unsupported version of Final Cut Pro installed? |
+| **Type** | Field |
+| **Description** | The ColorBoard instance from the primary window |
-### Methods
+#### [colorCorrection](#colorcorrection)
+| **Signature** | `cp.apple.finalcutpro.presfs.GeneralPanel.colorCorrection ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Color Correction" `PopUpButton`. |
-#### [application](#application)
-| **Signature** | `cp.apple.finalcutpro:application() -> hs.application` |
+#### [commandEditor](#commandeditor)
+| **Signature** | `cp.apple.finalcutpro.commandEditor ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the running `hs.application` for Final Cut Pro. |
-| **Parameters** | |
-| **Returns** | - The hs.application, or `nil` if the application is not running.
|
+| **Type** | Field |
+| **Description** | The Final Cut Pro Command Editor |
-#### [browser](#browser)
-| **Signature** | `cp.apple.finalcutpro:browser() -> Browser` |
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.ShareInspector.contentUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Browser instance, whether it is in the primary or secondary window. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The `axuielement` containing the properties rows, if available. |
-#### [colorBoard](#colorboard)
-| **Signature** | `cp.apple.finalcutpro:colorBoard() -> ColorBoard` |
+#### [contentUI](#contentui)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.TextInspector.contentUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorBoard instance from the primary window |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The `axuielement` containing the properties rows, if available. |
-#### [colorInspector](#colorinspector)
-| **Signature** | `cp.apple.finalcutpro:colorInspector() -> ColorInspector` |
+#### [deselectAll](#deselectall)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.TextInspector.deselectAll ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ColorInspector instance from the primary window |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The left text layer arrow at the bottom of the Inspector. |
-#### [commandEditor](#commandeditor)
-| **Signature** | `cp.apple.finalcutpro:commandEditor() -> commandEditor object` |
+#### [effects](#effects)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.VideoInspector.effects ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Command Editor |
-| **Parameters** | |
-| **Returns** | - The Final Cut Pro Command Editor
|
+| **Type** | Field |
+| **Description** | Effects |
#### [effects](#effects)
-| **Signature** | `cp.apple.finalcutpro:effects() -> EffectsBrowser` |
+| **Signature** | `cp.apple.finalcutpro.effects ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the EffectsBrowser instance, whether it is in the primary or secondary window. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The EffectsBrowser instance, whether it is in the primary or secondary window. |
#### [eventViewer](#eventviewer)
-| **Signature** | `cp.apple.finalcutpro:eventViewer() -> Event Viewer` |
+| **Signature** | `cp.apple.finalcutpro.eventViewer ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Event Viewer instance, whether it is in the primary or secondary window. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The Event [Viewer](cp.apple.finalcutpro.viewer.Viewer.md) instance, whether it is in the primary or secondary window. |
#### [exportDialog](#exportdialog)
-| **Signature** | `cp.apple.finalcutpro:exportDialog() -> exportDialog object` |
+| **Signature** | `cp.apple.finalcutpro.exportDialog ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Export Dialog Box |
-| **Parameters** | |
-| **Returns** | - The Final Cut Pro Export Dialog Box
|
+| **Type** | Field |
+| **Description** | The Final Cut Pro Export Dialog Box |
+
+#### [findAndReplaceTitleText](#findandreplacetitletext)
+| **Signature** | `cp.apple.finalcutpro.findAndReplaceTitleText ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [FindAndReplaceTitleText](cp.apple.finalcutpro.main.FindAndReplaceTitleText.md) dialog window. |
#### [fullScreenWindow](#fullscreenwindow)
-| **Signature** | `cp.apple.finalcutpro:fullScreenWindow() -> fullScreenWindow object` |
+| **Signature** | `cp.apple.finalcutpro.fullScreenWindow ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Full Screen Window |
-| **Parameters** | |
-| **Returns** | - The Full Screen Playback Window
|
+| **Type** | Field |
+| **Description** | Returns the Final Cut Pro Full Screen Window (usually triggered by Cmd+Shift+F) |
#### [generators](#generators)
-| **Signature** | `cp.apple.finalcutpro:generators() -> GeneratorsBrowser` |
+| **Signature** | `cp.apple.finalcutpro.generators ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the GeneratorsBrowser instance, whether it is in the primary or secondary window. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The GeneratorsBrowser instance, whether it is in the primary or secondary window. |
-#### [getActiveCommandSet](#getactivecommandset)
-| **Signature** | `cp.apple.finalcutpro:getActiveCommandSet([forceReload]) -> table or nil` |
+#### [inspector](#inspector)
+| **Signature** | `cp.apple.finalcutpro.inspector ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the 'Active Command Set' as a Table. The result is cached, so pass in |
-| **Parameters** | - [forceReload] - If `true`, require the Command Set to be reloaded.
|
-| **Returns** | - A table of the Active Command Set's contents, or `nil` if an error occurred
|
+| **Type** | Field |
+| **Description** | The [Inspector](cp.apple.finalcutpro.inspector.Inspector.md) instance from the primary window. |
-#### [getActiveCommandSetPath](#getactivecommandsetpath)
-| **Signature** | `cp.apple.finalcutpro:getActiveCommandSetPath() -> string or nil` |
+#### [inspectorUnits](#inspectorunits)
+| **Signature** | `cp.apple.finalcutpro.presfs.GeneralPanel.inspectorUnits ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the 'Active Command Set' value from the Final Cut Pro preferences |
-| **Parameters** | |
-| **Returns** | - The 'Active Command Set' value, or the 'Default' command set if none is set.
|
+| **Type** | Field |
+| **Description** | The "Inspector Units" `PopUpButton`. |
-#### [getBundleID](#getbundleid)
-| **Signature** | `cp.apple.finalcutpro:getBundleID() -> string` |
+#### [isFrontmost](#isfrontmost)
+| **Signature** | `cp.apple.finalcutpro:isFrontmost ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Bundle ID |
-| **Parameters** | |
-| **Returns** | - A string of the Final Cut Pro Bundle ID
|
+| **Type** | Field |
+| **Description** | Is Final Cut Pro Frontmost? |
-#### [getCommandSet](#getcommandset)
-| **Signature** | `cp.apple.finalcutpro:getCommandSet(path) -> string` |
+#### [isInstalled](#isinstalled)
+| **Signature** | `cp.apple.finalcutpro.isInstalled ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Loads the Command Set at the specified path into a table. |
-| **Parameters** | - `path` - The path to the command set.
|
-| **Returns** | - The Command Set as a table, or `nil` if there was a problem.
|
+| **Type** | Field |
+| **Description** | Is any version of Final Cut Pro Installed? |
-#### [getCommandShortcuts](#getcommandshortcuts)
-| **Signature** | `cp.apple.finalcutpro.getCommandShortcuts(id) -> table of hs.commands.shortcut` |
+#### [isModalDialogOpen](#ismodaldialogopen)
+| **Signature** | `cp.apple.finalcutpro:isModalDialogOpen ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds a shortcut from the Active Command Set with the specified ID and returns a table |
-| **Parameters** | - id - The unique ID for the command.
|
-| **Returns** | - The array of shortcuts, or `nil` if no command exists with the specified `id`.
|
+| **Type** | Field |
+| **Description** | Is a modal dialog currently open? |
-#### [getDefaultCommandSetPath](#getdefaultcommandsetpath)
-| **Signature** | `cp.apple.finalcutpro:getDefaultCommandSetPath([langauge]) -> string` |
+#### [isPlaying](#isplaying)
+| **Signature** | `cp.apple.finalcutpro.main.Viewer.isPlaying ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets the path to the 'Default' Command Set. |
-| **Parameters** | - [language] - The optional language code to use. Defaults to the current FCPX language.
|
-| **Returns** | - The 'Default' Command Set path, or `nil` if an error occurred
|
+| **Type** | Field |
+| **Description** | The 'playing' status of the viewer. If true, it is playing, if not it is paused. |
-#### [getFlexoLanguages](#getflexolanguages)
-| **Signature** | `cp.apple.finalcutpro:getFlexoLanguages() -> table` |
+#### [isPlaying](#isplaying)
+| **Signature** | `cp.apple.finalcutpro.main.ControlBar.isPlaying ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table of languages Final Cut Pro's Flexo Framework supports |
-| **Parameters** | |
-| **Returns** | - A table of languages Final Cut Pro supports
|
+| **Type** | Field |
+| **Description** | The 'playing' status of the viewer. If true, it is playing, if not it is paused. |
-#### [getPasteboardUTI](#getpasteboarduti)
-| **Signature** | `cp.apple.finalcutpro:getPasteboardUTI() -> string` |
+#### [isRunning](#isrunning)
+| **Signature** | `cp.apple.finalcutpro.isRunning ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Pasteboard UTI |
-| **Parameters** | |
-| **Returns** | - A string of the Final Cut Pro Pasteboard UTI
|
+| **Type** | Field |
+| **Description** | Is Final Cut Pro Running? |
-#### [getPath](#getpath)
-| **Signature** | `cp.apple.finalcutpro:getPath() -> string or nil` |
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.isShowing ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Path to Final Cut Pro Application |
-| **Parameters** | |
-| **Returns** | - A string containing Final Cut Pro's filesystem path, or nil if Final Cut Pro's path could not be determined.
|
+| **Type** | Field |
+| **Description** | Is Final Cut visible on screen? |
-#### [getPreference](#getpreference)
-| **Signature** | `cp.apple.finalcutpro:getPreference(value, [default], [forceReload]) -> string or nil` |
+#### [isSupported](#issupported)
+| **Signature** | `cp.apple.finalcutpro.isSupported ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Get an individual Final Cut Pro preference |
-| **Parameters** | - value - The preference you want to return
- [default] - The optional default value to return if the preference is not set.
- [forceReload] - If `true`, optionally forces a reload of the app's preferences.
|
-| **Returns** | - A string with the preference value, or nil if an error occurred
|
+| **Type** | Field |
+| **Description** | Is a supported version of Final Cut Pro installed? |
-#### [getPreferences](#getpreferences)
-| **Signature** | `cp.apple.finalcutpro:getPreferences([forceReload]) -> table or nil` |
+#### [isUnsupported](#isunsupported)
+| **Signature** | `cp.apple.finalcutpro.isUnsupported ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Gets Final Cut Pro's Preferences as a table. It checks if the preferences |
-| **Parameters** | - [forceReload] - If `true`, an optional reload will be forced even if the file hasn't been modified.
|
-| **Returns** | - A table with all of Final Cut Pro's preferences, or nil if an error occurred
|
+| **Type** | Field |
+| **Description** | Is an unsupported version of Final Cut Pro installed? |
-#### [getSupportedLanguage](#getsupportedlanguage)
-| **Signature** | `cp.apple.finalcutpro:getSupportedLanguage(language) -> boolean` |
+#### [keywordEditor](#keywordeditor)
+| **Signature** | `cp.apple.finalcutpro.keywordEditor ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks if the provided `language` is supported by the app and returns the actual support code, or `nil` if there is no supported version of the language. |
-| **Parameters** | - `language` - The language code to check. E.g. "en" or "zh_CN"
|
-| **Returns** | - `true` if the language is supported.
|
+| **Type** | Field |
+| **Description** | The Final Cut Pro Keyword Editor |
-#### [getSupportedLanguages](#getsupportedlanguages)
-| **Signature** | `cp.apple.finalcutpro:getSupportedLanguages() -> table` |
+#### [libraries](#libraries)
+| **Signature** | `cp.apple.finalcutpro.libraries ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table of languages Final Cut Pro supports |
-| **Parameters** | |
-| **Returns** | - A table of languages Final Cut Pro supports
|
+| **Type** | Field |
+| **Description** | The [LibrariesBrowser](cp.apple.finalcutpro.main.LibrariesBrowser.md) instance, whether it is in the primary or secondary window. |
-#### [hide](#hide)
-| **Signature** | `cp.apple.finalcutpro:hide() -> cp.apple.finalcutpro` |
+#### [media](#media)
+| **Signature** | `cp.apple.finalcutpro.media ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Hides Final Cut Pro |
-| **Parameters** | |
-| **Returns** | - A cp.apple.finalcutpro otherwise nil
|
+| **Type** | Field |
+| **Description** | The MediaBrowser instance, whether it is in the primary or secondary window. |
-#### [importXML](#importxml)
-| **Signature** | `cp.apple.finalcutpro:importXML(path) -> boolean` |
+#### [mediaImport](#mediaimport)
+| **Signature** | `cp.apple.finalcutpro.mediaImport ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Imports an XML file into Final Cut Pro |
-| **Parameters** | |
-| **Returns** | - A boolean value indicating whether the AppleScript succeeded or not
|
+| **Type** | Field |
+| **Description** | The Final Cut Pro Media Import Window |
-#### [inspector](#inspector)
-| **Signature** | `cp.apple.finalcutpro:inspector() -> Inspector` |
+#### [pan](#pan)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.VideoInspector.pan ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Inspector instance from the primary window |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | Pan |
-#### [isSupportedLanguage](#issupportedlanguage)
-| **Signature** | `cp.apple.finalcutpro:isSupportedLanguage(language) -> boolean` |
+#### [preferencesWindow](#preferenceswindow)
+| **Signature** | `cp.apple.finalcutpro.preferencesWindow ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks if the provided `language` is supported by the app. |
-| **Parameters** | - `language` - The language code to check. E.g. "en" or "zh_CN"
|
-| **Returns** | - `true` if the language is supported.
|
+| **Type** | Field |
+| **Description** | The Final Cut Pro Preferences Window |
-#### [keysWithString](#keyswithstring)
-| **Signature** | `cp.apple.finalcutpro:keysWithString(string[, lang]) -> {string}` |
+#### [preset](#preset)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.TextInspector.preset ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Looks up an application string and returns an array of keys that match. It will take into account current language the app is running in, or use `lang` if provided. |
-| **Parameters** | - `key` - The key to look up.
- `[lang]` - The language (defaults to current FCPX language).
|
-| **Returns** | - The array of keys with a matching string.
|
-| **Notes** | - This method may be very inefficient, since it has to search through every possible key/value pair to find matches. It is not recommended that this is used in production.
|
+| **Type** | Field |
+| **Description** | The preset popup found at the top of the inspector. |
-#### [launch](#launch)
-| **Signature** | `cp.apple.finalcutpro:launch() -> boolean` |
+#### [primaryWindow](#primarywindow)
+| **Signature** | `cp.apple.finalcutpro.primaryWindow ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Launches Final Cut Pro, or brings it to the front if it was already running. |
-| **Parameters** | |
-| **Returns** | - `true` if Final Cut Pro was either launched or focused, otherwise false (e.g. if Final Cut Pro doesn't exist)
|
+| **Type** | Field |
+| **Description** | The Final Cut Pro Primary Window |
-#### [libraries](#libraries)
-| **Signature** | `cp.apple.finalcutpro:libraries() -> LibrariesBrowser` |
+#### [resetDialogWarnings](#resetdialogwarnings)
+| **Signature** | `cp.apple.finalcutpro.presfs.GeneralPanel.resetDialogWarnings ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the LibrariesBrowser instance, whether it is in the primary or secondary window. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The "Reset Dialog warnings" `Button`. |
-#### [media](#media)
-| **Signature** | `cp.apple.finalcutpro:media() -> MediaBrowser` |
+#### [secondaryWindow](#secondarywindow)
+| **Signature** | `cp.apple.finalcutpro.secondaryWindow ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the MediaBrowser instance, whether it is in the primary or secondary window. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The Final Cut Pro Preferences Window |
-#### [mediaImport](#mediaimport)
-| **Signature** | `cp.apple.finalcutpro:mediaImport() -> mediaImport object` |
+#### [textArea](#textarea)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.TextInspector.textArea ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Media Import Window |
-| **Parameters** | |
-| **Returns** | - The Final Cut Pro Media Import Window
|
+| **Type** | Field |
+| **Description** | The Text Inspector main Text Area. |
-#### [menuBar](#menubar)
-| **Signature** | `cp.apple.finalcutpro:menuBar() -> menuBar object` |
+#### [textLayerLeft](#textlayerleft)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.TextInspector.textLayerLeft ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Menu Bar |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The left text layer arrow at the bottom of the Inspector. |
-#### [performShortcut](#performshortcut)
-| **Signature** | `cp.apple.finalcutpro:performShortcut(whichShortcut) -> boolean` |
+#### [textLayerRight](#textlayerright)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.TextInspector.textLayerRight ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Performs a Final Cut Pro Shortcut |
-| **Parameters** | - whichShortcut - As per the Command Set name
|
-| **Returns** | - true if successful otherwise false
|
+| **Type** | Field |
+| **Description** | The left text layer arrow at the bottom of the Inspector. |
-#### [plugins](#plugins)
-| **Signature** | `cp.apple.finalcutpro:plugins() -> cp.apple.finalcutpro.plugins` |
+#### [timeDisplay](#timedisplay)
+| **Signature** | `cp.apple.finalcutpro.presfs.GeneralPanel.timeDisplay ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the plugins manager for the app. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The "Time Display" `PopUpButton`. |
-#### [preferencesWindow](#preferenceswindow)
-| **Signature** | `cp.apple.finalcutpro:preferencesWindow() -> preferenceWindow object` |
+#### [timeline](#timeline)
+| **Signature** | `cp.apple.finalcutpro.timeline ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Preferences Window |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The Timeline instance, whether it is in the primary or secondary window. |
-#### [primaryWindow](#primarywindow)
-| **Signature** | `cp.apple.finalcutpro:primaryWindow() -> primaryWindow object` |
+#### [toolbar](#toolbar)
+| **Signature** | `cp.apple.finalcutpro.toolbar ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Preferences Window |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Field |
+| **Description** | The Primary Toolbar - the toolbar at the top of the Primary Window. |
-#### [quit](#quit)
-| **Signature** | `cp.apple.finalcutpro:quit() -> cp.apple.finalcutpro` |
+#### [transcodeMedia](#transcodemedia)
+| **Signature** | `cp.apple.finalcutpro.transcodeMedia ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Quits Final Cut Pro |
+| **Type** | Field |
+| **Description** | The [TranscodeMedia](cp.apple.finalcutpro.main.TranscodeMedia.md) sheet. |
+
+#### [transitions](#transitions)
+| **Signature** | `cp.apple.finalcutpro.transitions ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Transitions `EffectsBrowser` instance, whether it is in the primary or secondary window. |
+
+#### [UI](#ui)
+| **Signature** | `cp.apple.finalcutpro.UI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Final Cut Pro `axuielement`, if available. |
+
+#### [validateAudioUnits](#validateaudiounits)
+| **Signature** | `cp.apple.finalcutpro.presfs.GeneralPanel.validateAudioUnits ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Validate Audio Units" `Button`. |
+
+#### [viewer](#viewer)
+| **Signature** | `cp.apple.finalcutpro.viewer ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Viewer](cp.apple.finalcutpro.viewer.Viewer.md) instance, whether it is in the primary or secondary window. |
+
+#### [volume](#volume)
+| **Signature** | `cp.apple.finalcutpro.inspector.color.VideoInspector.volume ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Volume |
+
+#### [windowsUI](#windowsui)
+| **Signature** | `cp.apple.finalcutpro.windowsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the UI containing the list of windows in the app. |
+
+### Methods
+
+#### [activeLibraryPaths](#activelibrarypaths)
+| **Signature** | `cp.apple.finalcutpro:activeLibraryPaths() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets a table of all the active library paths. |
| **Parameters** | |
-| **Returns** | - A cp.apple.finalcutpro otherwise nil
|
+| **Returns** | - A table containing any active library paths.
|
-#### [restart](#restart)
-| **Signature** | `cp.apple.finalcutpro:restart(waitUntilRestarted) -> boolean` |
+#### [closeLibrary](#closelibrary)
+| **Signature** | `cp.apple.finalcutpro:closeLibrary(title) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Restart Final Cut Pro |
-| **Parameters** | - `waitUntilRestarted` - If `true`, the function will not return until the app has restarted.
|
-| **Returns** | - `true` if Final Cut Pro was running and restarted successfully.
|
+| **Type** | Method |
+| **Description** | Attempts to close a library with the specified `title`. |
+| **Parameters** | - title - The title of the FCP Library to close.
|
+| **Returns** | true if successful, or false if not.
|
-#### [scanPlugins](#scanplugins)
-| **Signature** | `cp.apple.finalcutpro:scanPlugins() -> table` |
+#### [defaultCommandSetPath](#defaultcommandsetpath)
+| **Signature** | `cp.apple.finalcutpro:defaultCommandSetPath([locale]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the path to the 'Default' Command Set. |
+| **Parameters** | |
+| **Returns** | - The 'Default' Command Set path, or
nil if an error occurred
|
+
+#### [doShortcut](#doshortcut)
+| **Signature** | `cp.apple.finalcutpro:doShortcut(whichShortcut) -> Statement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Scan Final Cut Pro Plugins |
+| **Type** | Method |
+| **Description** | Perform a Final Cut Pro Keyboard Shortcut |
+| **Parameters** | - whichShortcut - As per the Command Set name
|
+| **Returns** | - A
Statement that will perform the shortcut when executed.
|
+
+#### [getCommandShortcuts](#getcommandshortcuts)
+| **Signature** | `cp.apple.finalcutpro.getCommandShortcuts(id) -> table of hs.commands.shortcut` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds a shortcut from the Active Command Set with the specified ID and returns a table |
+| **Parameters** | - id - The unique ID for the command.
|
+| **Returns** | - The array of shortcuts, or
nil if no command exists with the specified id.
|
+
+#### [getPath](#getpath)
+| **Signature** | `cp.apple.finalcutpro:getPath() -> string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Path to Final Cut Pro Application |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - A string containing Final Cut Pro's filesystem path, or nil if Final Cut Pro's path could not be determined.
|
-#### [secondaryWindow](#secondarywindow)
-| **Signature** | `cp.apple.finalcutpro:secondaryWindow() -> secondaryWindow object` |
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro:hide() -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro Preferences Window |
+| **Type** | Method |
+| **Description** | Hides Final Cut Pro |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
-#### [selectMenu](#selectmenu)
-| **Signature** | `cp.apple.finalcutpro:selectMenu(path) -> boolean` |
+#### [importXML](#importxml)
+| **Signature** | `cp.apple.finalcutpro:importXML(path) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Selects a Final Cut Pro Menu Item based on the list of menu titles in English. |
-| **Parameters** | - `path` - The list of menu items you'd like to activate, for example:
- select("View", "Browser", "as List")
|
-| **Returns** | - `true` if the press was successful.
|
+| **Type** | Method |
+| **Description** | Imports an XML file into Final Cut Pro |
+| **Parameters** | |
+| **Returns** | - A boolean value indicating whether the AppleScript succeeded or not
|
-#### [setPreference](#setpreference)
-| **Signature** | `cp.apple.finalcutpro:setPreference(key, value) -> boolean` |
+#### [isSupportedLocale](#issupportedlocale)
+| **Signature** | `cp.apple.finalcutpro:isSupportedLocale(locale) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets an individual Final Cut Pro preference |
-| **Parameters** | - key - The preference you want to change
- value - The value you want to set for that preference
|
-| **Returns** | - True if executed successfully otherwise False
|
+| **Type** | Method |
+| **Description** | Checks if the provided `locale` is supported by the app. |
+| **Parameters** | language - The cp.i18n.localeID or string code. E.g. "en" or "zh_CN"
|
+| **Returns** | true if the locale is supported.
|
-#### [show](#show)
-| **Signature** | `cp.apple.finalcutpro:show() -> cp.apple.finalcutpro` |
+#### [keysWithString](#keyswithstring)
+| **Signature** | `cp.apple.finalcutpro:keysWithString(string[, locale]) -> {string}` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Looks up an application string and returns an array of keys that match. It will take into account current locale the app is running in, or use `locale` if provided. |
+| **Parameters** | key - The key to look up.locale - The locale (defaults to current FCPX locale).
|
+| **Returns** | - The array of keys with a matching string.
|
+| **Notes** | - This method may be very inefficient, since it has to search through every possible key/value pair to find matches. It is not recommended that this is used in production.
|
+
+#### [launch](#launch)
+| **Signature** | `cp.apple.finalcutpro:launch([waitSeconds], [path]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Launches Final Cut Pro, or brings it to the front if it was already running. |
+| **Parameters** | waitSeconds - If provided, the number of seconds to wait until the launch completes. If nil, it will return immediately.path - An optional full path to an application without an extension (i.e /Applications/Final Cut Pro 10.3.4). This allows you to load previous versions of the application.
|
+| **Returns** | |
+
+#### [openLibrary](#openlibrary)
+| **Signature** | `cp.apple.finalcutpro:openLibrary(path) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to open a file at the specified absolute `path`. |
+| **Parameters** | - path - The path to the FCP Library to open.
|
+| **Returns** | true if successful, or false if not.
|
+
+#### [plugins](#plugins)
+| **Signature** | `cp.apple.finalcutpro:plugins() -> cp.apple.finalcutpro.plugins` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Activate Final Cut Pro |
+| **Type** | Method |
+| **Description** | Returns the plugins manager for the app. |
| **Parameters** | |
-| **Returns** | - A cp.apple.finalcutpro otherwise nil
|
+| **Returns** | |
-#### [string](#string)
-| **Signature** | `cp.apple.finalcutpro:string(key[, lang]) -> string` |
+#### [quit](#quit)
+| **Signature** | `cp.apple.finalcutpro:quit([waitSeconds]) -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Looks up an application string with the specified `key`. |
-| **Parameters** | - `key` - The key to look up.
- `[lang]` - The language code to use. Defaults to the current language.
|
-| **Returns** | - The requested string or `nil` if the application is not running.
|
+| **Type** | Method |
+| **Description** | Quits Final Cut Pro, if it's running. |
+| **Parameters** | - waitSeconds - The number of seconds to wait for the quit to complete.
|
+| **Returns** | |
-#### [timeline](#timeline)
-| **Signature** | `cp.apple.finalcutpro:timeline() -> Timeline` |
+#### [recentLibraryNames](#recentlibrarynames)
+| **Signature** | `cp.apple.finalcutpro:recentLibraryNames() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Timeline instance, whether it is in the primary or secondary window. |
+| **Type** | Method |
+| **Description** | Gets a table of all the recent library names (that are accessible). |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - A table containing any recent library names.
|
-#### [transitions](#transitions)
-| **Signature** | `cp.apple.finalcutpro:transitions() -> TransitionsBrowser` |
+#### [recentLibraryPaths](#recentlibrarypaths)
+| **Signature** | `cp.apple.finalcutpro:recentLibraryPaths() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the TransitionsBrowser instance, whether it is in the primary or secondary window. |
+| **Type** | Method |
+| **Description** | Gets a table of all the recent library paths (that are accessible). |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - A table containing any recent library paths.
|
-#### [UI](#ui)
-| **Signature** | `cp.apple.finalcutpro:UI() -> axuielement` |
+#### [scanPlugins](#scanplugins)
+| **Signature** | `cp.apple.finalcutpro:scanPlugins() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Final Cut Pro axuielement |
+| **Type** | Method |
+| **Description** | Scan Final Cut Pro Plugins |
| **Parameters** | |
-| **Returns** | - A axuielementObject of Final Cut Pro
|
+| **Returns** | |
-#### [unwatch](#unwatch)
-| **Signature** | `cp.apple.finalcutpro:unwatch(id) -> boolean` |
+#### [selectLibrary](#selectlibrary)
+| **Signature** | `cp.apple.finalcutpro:selectLibrary(title) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Stop watching for events that happen in the application for the specified ID. |
-| **Parameters** | - `id` - The ID object which was returned from the `watch(...)` function.
|
-| **Returns** | - `true` if the ID was watching and has been removed.
|
+| **Type** | Method |
+| **Description** | Attempts to select an open library with the specified title. |
+| **Parameters** | - title - The title of the library to select.
|
+| **Returns** | - The library row
axuielement.
|
-#### [viewer](#viewer)
-| **Signature** | `cp.apple.finalcutpro:viewer() -> Viewer` |
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro:show() -> cp.apple.finalcutpro` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the Viewer instance, whether it is in the primary or secondary window. |
+| **Type** | Method |
+| **Description** | Activate Final Cut Pro, if it is running. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
-#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro:watch(events) -> string` |
+#### [string](#string)
+| **Signature** | `cp.apple.finalcutpro:string(key[, locale[, quiet]]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watch for events that happen in the application. |
-| **Parameters** | - `events` - A table of functions with to watch. These may be:
- * `active` - Triggered when the application is the active application.
- * `inactive` - Triggered when the application is no longer the active application.
- `launched - Triggered when the application is launched.
- `terminated - Triggered when the application has been closed.
- * `preferences` - Triggered when the application preferences are updated.
|
-| **Returns** | - An ID which can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Looks up an application string with the specified `key`. |
+| **Parameters** | key - The key to look up.locale - The locale code to use. Defaults to the current locale.quiet - Optional boolean, defaults to false. If true, no warnings are logged for missing keys.
|
+| **Returns** | - The requested string or
nil if the application is not running.
|
-#### [windowsUI](#windowsui)
-| **Signature** | `cp.apple.finalcutpro:windowsUI() -> axuielement` |
+#### [userCommandSets](#usercommandsets)
+| **Signature** | `cp.apple.finalcutpro:userCommandSets() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the UI containing the list of windows in the app. |
+| **Type** | Method |
+| **Description** | Gets the names of all of the user command sets. |
| **Parameters** | |
-| **Returns** | - The axuielement, or nil if the application is not running.
|
+| **Returns** | - A table of user command sets as strings.
|
diff --git a/api/cp/cp.apple.finalcutpro.menu.md b/api/cp/cp.apple.finalcutpro.menu.md
new file mode 100644
index 0000000..bec65f2
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.menu.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.apple.finalcutpro.menu
+---
+
+Final Cut Pro Menu Helper Functions.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.apple.finalcutpro.plugins.guiscan.md b/api/cp/cp.apple.finalcutpro.plugins.guiscan.md
new file mode 100644
index 0000000..3591f1d
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.plugins.guiscan.md
@@ -0,0 +1,15 @@
+# [docs](index.md) » cp.apple.finalcutpro.plugins.guiscan
+---
+
+Final Cut Pro GUI Plugin Scanner.
+
+**Usage:**
+```lua
+require("cp.apple.finalcutpro.plugins.guiscan").checkAllPlugins()
+require("cp.apple.finalcutpro.plugins.guiscan").checkAllPluginsInAllLanguages()
+```
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.apple.finalcutpro.plugins.md b/api/cp/cp.apple.finalcutpro.plugins.md
index 65fd6bb..b963b7e 100644
--- a/api/cp/cp.apple.finalcutpro.plugins.md
+++ b/api/cp/cp.apple.finalcutpro.plugins.md
@@ -1,30 +1,51 @@
# [docs](index.md) » cp.apple.finalcutpro.plugins
---
-Scan Final Cut Pro bundle for Effects, Generators, Titles & Transitions.
+Scans an entire system for Final Cut Pro Effects, Generators, Titles & Transitions.
Usage:
-require("cp.apple.finalcutpro"):plugins():scan()
+```lua
+ require("cp.apple.finalcutpro"):plugins():scan()
+```
+
+## Submodules
+ * [cp.apple.finalcutpro.plugins.guiscan](cp.apple.finalcutpro.plugins.guiscan.md)
## API Overview
* Constants - Useful values which cannot be changed
- * [appBuiltinPlugins](#appbuiltinplugins)
- * [appEdelEffects](#appedeleffects)
- * [audioUnitsCache](#audiounitscache)
- * [coreAudioPreferences](#coreaudiopreferences)
* [types](#types)
* Functions - API calls offered directly by the extension
* [clearCaches](#clearcaches)
+ * [new](#new)
* [scan](#scan)
+ * [scanAppEffectsPresets](#scanappeffectspresets)
+ * [scanned](#scanned)
+ * [scanSystemAudioUnits](#scansystemaudiounits)
+ * [scanUserColorPresets](#scanusercolorpresets)
+ * [scanUserEffectsPresets](#scanusereffectspresets)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
* [audioEffects](#audioeffects)
+ * [effectBundleStrings](#effectbundlestrings)
+ * [effectStrings](#effectstrings)
* [generators](#generators)
* [ofType](#oftype)
* [registerPlugin](#registerplugin)
+ * [reset](#reset)
* [scanAll](#scanall)
+ * [scanAppAudioEffectBundles](#scanappaudioeffectbundles)
+ * [scanAppBuiltInPlugins](#scanappbuiltinplugins)
+ * [scanAppEdelEffects](#scanappedeleffects)
+ * [scanAppMotionTemplates](#scanappmotiontemplates)
+ * [scanPluginCategoryDirectory](#scanplugincategorydirectory)
* [scanPluginsDirectory](#scanpluginsdirectory)
+ * [scanPluginThemeDirectory](#scanpluginthemedirectory)
+ * [scanSystemMotionTemplates](#scansystemmotiontemplates)
+ * [scanUserMotionTemplates](#scanusermotiontemplates)
* [titles](#titles)
* [transitions](#transitions)
+ * [translateEffectBundle](#translateeffectbundle)
+ * [unwatch](#unwatch)
* [videoEffects](#videoeffects)
* [watch](#watch)
@@ -32,130 +53,272 @@ require("cp.apple.finalcutpro"):plugins():scan()
### Constants
-#### [appBuiltinPlugins](#appbuiltinplugins)
-| **Signature** | `cp.apple.finalcutpro.plugins.appBuiltinPlugins` |
+#### [types](#types)
+| **Signature** | `cp.apple.finalcutpro.plugins.types -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of built-in plugins |
+| **Type** | Constant |
+| **Description** | Table of the different audio/video/transition/generator types. |
+
+### Functions
-#### [appEdelEffects](#appedeleffects)
-| **Signature** | `cp.apple.finalcutpro.plugins.appEdelEffects` |
+#### [clearCaches](#clearcaches)
+| **Signature** | `cp.apple.finalcutpro.plugins.clearCaches() -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of Built-in Soundtrack Pro EDEL Effects. |
+| **Type** | Function |
+| **Description** | Clears any local caches created for tracking the plugins. |
+| **Parameters** | |
+| **Returns** | true if the caches have been cleared successfully.
|
+| **Notes** | - Does not uninstall any of the actual plugins.
|
-#### [audioUnitsCache](#audiounitscache)
-| **Signature** | `cp.apple.finalcutpro.plugins.audioUnitsCache` |
+#### [new](#new)
+| **Signature** | `cp.apple.finalcutpro.plugins.new(fcp) -> plugins object` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to the Audio Units Cache |
+| **Type** | Function |
+| **Description** | Creates a new Plugins Object. |
+| **Parameters** | - fcp - The
cp.apple.finalcutpro object
|
+| **Returns** | |
-#### [coreAudioPreferences](#coreaudiopreferences)
-| **Signature** | `cp.apple.finalcutpro.plugins.coreAudioPreferences` |
+#### [scan](#scan)
+| **Signature** | `cp.apple.finalcutpro.plugins:scan() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Core Audio Preferences File Path |
+| **Type** | Function |
+| **Description** | Scans Final Cut Pro for Effects, Transitions, Generators & Titles |
+| **Parameters** | - fcp - the
cp.apple.finalcutpro instance
|
+| **Returns** | |
-#### [types](#types)
-| **Signature** | `cp.apple.finalcutpro.plugins.types` |
+#### [scanAppEffectsPresets](#scanappeffectspresets)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanAppEffectsPresets(locale) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of the different Motion Template Extensions |
+| **Type** | Function |
+| **Description** | Scans Final Cut Pro Built-in Effects Presets |
+| **Parameters** | locale - The locale to scan for.
|
+| **Returns** | |
-### Functions
+#### [scanned](#scanned)
+| **Signature** | `cp.apple.finalcutpro.plugins.scanned() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets if the system has been scanned. |
+| **Parameters** | |
+| **Returns** | true is scanned otherwise false.
|
-#### [clearCaches](#clearcaches)
-| **Signature** | `cp.apple.finalcutpro.plugins.clearCaches() -> boolean` |
+#### [scanSystemAudioUnits](#scansystemaudiounits)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanSystemAudioUnits(locale) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Clears any local caches created for tracking the plugins. |
-| **Parameters** | |
-| **Returns** | - * `true` if the caches have been cleared successfully.
|
+| **Type** | Function |
+| **Description** | Scans for Validated Audio Units, and saves the results to a cache for faster subsequent startup times. |
+| **Parameters** | - locale - the locale to scan in.
|
+| **Returns** | |
-#### [scan](#scan)
-| **Signature** | `cp.apple.finalcutpro.plugins:scan() -> none` |
+#### [scanUserColorPresets](#scanusercolorpresets)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanUserColorPresets(locale) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Scans Final Cut Pro for Effects, Transitions, Generators & Titles |
-| **Parameters** | - fcp - the `cp.apple.finalcutpro` instance
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Scans Final Cut Pro User Color Presets |
+| **Parameters** | locale - The locale to scan for.
|
+| **Returns** | |
+
+#### [scanUserEffectsPresets](#scanusereffectspresets)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanUserEffectsPresets(locale) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Scans Final Cut Pro Effects Presets |
+| **Parameters** | locale - The locale to scan for.
|
+| **Returns** | |
### Methods
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.plugins:app() -> plugins` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `cp.apple.finalcutpro` object. |
+| **Parameters** | |
+| **Returns** | - The
cp.apple.finalcutpro object.
|
+
#### [audioEffects](#audioeffects)
-| **Signature** | `cp.apple.finalcutpro.plugins:audioEffects([language]) -> table` |
+| **Signature** | `cp.apple.finalcutpro.plugins:audioEffects([locale]) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the 'audio effect' plugins. |
+| **Parameters** | locale - The locale code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
+| **Returns** | - A table of the available plugins.
|
+
+#### [effectBundleStrings](#effectbundlestrings)
+| **Signature** | `cp.apple.finalcutpro.plugins:effectBundleStrings() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns all the Effect Bundle Strings. |
+| **Parameters** | |
+| **Returns** | - The effect bundle strings in a table.
|
+
+#### [effectStrings](#effectstrings)
+| **Signature** | `cp.apple.finalcutpro.plugins:effectStrings() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the 'audio effect' plugins. |
-| **Parameters** | - * `language` - The language code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
-| **Returns** | - * A table of the available plugins.
|
+| **Type** | Method |
+| **Description** | Returns a table of Effects Strings. |
+| **Parameters** | |
+| **Returns** | - A table of effect strings.
|
#### [generators](#generators)
-| **Signature** | `cp.apple.finalcutpro.plugins:generators([language]) -> table` |
+| **Signature** | `cp.apple.finalcutpro.plugins:generators([locale]) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the 'generator' plugins. |
-| **Parameters** | - * `language` - The language code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
-| **Returns** | - * A table of the available plugins.
|
+| **Type** | Method |
+| **Description** | Finds the 'generator' plugins. |
+| **Parameters** | locale - The locale code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
+| **Returns** | - A table of the available plugins.
|
#### [ofType](#oftype)
-| **Signature** | `cp.apple.finalcutpro.plugins:ofType(type[, language]) -> table` |
+| **Signature** | `cp.apple.finalcutpro.plugins:ofType(type[, locale]) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the plugins of the specified type (`types.videoEffect`, etc.) and if provided, language. |
-| **Parameters** | - * `type` - The plugin type. See `types` for the complete list.
- * `language` - The language code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
-| **Returns** | - * A table of the available plugins of the specified type.
|
+| **Type** | Method |
+| **Description** | Finds the plugins of the specified type (`types.videoEffect`, etc.) and if provided, locale. |
+| **Parameters** | type - The plugin type. See types for the complete list.locale - The locale code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
+| **Returns** | - A table of the available plugins of the specified type.
|
#### [registerPlugin](#registerplugin)
-| **Signature** | `cp.apple.finalcutpro.plugins:registerPlugin(path, type, categoryName, themeName, pluginName, language) -> plugin` |
+| **Signature** | `cp.apple.finalcutpro.plugins:registerPlugin(path, type, categoryName, themeName, pluginName, locale) -> plugin` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Registers a plugin with the specified details. |
-| **Parameters** | - `path` - The path to the plugin directory.
- `type` - The type of plugin
- `categoryName` - The category name, in the specified language.
- `themeName` - The theme name, in the specified language. May be `nil` if not in a theme.
- `pluginName` - The plugin name, in the specified language.
- `language` - The language code (e.g. "en", "fr", "de")
|
+| **Type** | Method |
+| **Description** | Registers a plugin with the specified details. |
+| **Parameters** | path - The path to the plugin directory.type - The type of plugincategoryName - The category name, in the specified locale.themeName - The theme name, in the specified locale. May be nil if not in a theme.pluginName - The plugin name, in the specified locale.locale - The cp.i18n.localeID or string code for same (e.g. "en", "fr", "de")
|
+| **Returns** | |
+| **Notes** | locale defaults to the current Final Cut Pro locale if nothing is supplied.
|
+
+#### [reset](#reset)
+| **Signature** | `cp.apple.finalcutpro.plugins:reset() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Resets all the cached plugins. |
+| **Parameters** | |
+| **Returns** | |
#### [scanAll](#scanall)
| **Signature** | `cp.apple.finalcutpro.plugins:scanAll() -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Scans all supported languages, loading them into memory. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Scans all supported locales, loading them into memory. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [scanAppAudioEffectBundles](#scanappaudioeffectbundles)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanAppAudioEffectBundles() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans the Audio Effect Bundles directories. |
+| **Parameters** | - directoryPath - Directory to scan
|
+| **Returns** | |
+
+#### [scanAppBuiltInPlugins](#scanappbuiltinplugins)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanAppBuiltInPlugins([locale]) -> None` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scan Built In Plugins. |
+| **Parameters** | locale - The cp.i18n.localeID code to search for. Defaults to the current FCPX langauge.
|
+| **Returns** | |
+
+#### [scanAppEdelEffects](#scanappedeleffects)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanAppEdelEffects() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans for Soundtrack Pro EDEL Effects. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [scanAppMotionTemplates](#scanappmotiontemplates)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanAppMotionTemplates(locale) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans for app-provided Final Cut Pro Plugins. |
+| **Parameters** | locale - The locale to scan for.
|
+| **Returns** | |
+
+#### [scanPluginCategoryDirectory](#scanplugincategorydirectory)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanPluginCategoryDirectory(locale, path, plugin) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans a folder as a plugin category folder. The contents will be folders that are either theme folders or actual plugins. |
+| **Parameters** | locale - The locale to scan with.path - The path to the plugin type directoryplugin - A table containing the plugin details collected so far.
|
+| **Returns** | true if the folder was scanned successfully.
|
#### [scanPluginsDirectory](#scanpluginsdirectory)
-| **Signature** | `cp.apple.finalcutpro.plugins:scanPluginsDirectory(language, path, filter) -> boolean` |
+| **Signature** | `cp.apple.finalcutpro.plugins:scanPluginsDirectory(locale, path, filter) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans a root plugins directory. Plugins directories have a standard structure which comes in two flavours: |
+| **Parameters** | locale - The locale code to scan for (e.g. "en" or "fr").path - The path of the root plugin directory to scan.checkFn - A function which will receive the path being scanned and return true if it should be scanned.
|
+| **Returns** | true if the plugin directory was successfully scanned.
|
+
+#### [scanPluginThemeDirectory](#scanpluginthemedirectory)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanPluginThemeDirectory(locale, path, plugin) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Scans a root plugins directory. Plugins directories have a standard structure which comes in two flavours: |
-| **Parameters** | - `language` - The language code to scan for (e.g. "en" or "fr").
- `path` - The path of the root plugin directory to scan.
- `checkFn` - A function which will receive the path being scanned and return `true` if it should be scanned.
|
-| **Returns** | - `true` if the plugin directory was successfully scanned.
|
+| **Type** | Method |
+| **Description** | Scans a folder as a plugin theme folder. The contents will be plugin folders. |
+| **Parameters** | locale - The locale to scan with.path - The path to the plugin type directoryplugin - A table containing the plugin details collected so far.
|
+| **Returns** | true if the folder was scanned successfully.
|
+
+#### [scanSystemMotionTemplates](#scansystemmotiontemplates)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanSystemMotionTemplates(locale) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans for system-provided Final Cut Pro Plugins. |
+| **Parameters** | locale - The locale to scan for.
|
+| **Returns** | |
+
+#### [scanUserMotionTemplates](#scanusermotiontemplates)
+| **Signature** | `cp.apple.finalcutpro.plugins:scanUserMotionTemplates(locale) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Scans for user-provided Final Cut Pro Plugins. |
+| **Parameters** | locale - The locale to scan for.
|
+| **Returns** | |
#### [titles](#titles)
-| **Signature** | `cp.apple.finalcutpro.plugins:titles([language]) -> table` |
+| **Signature** | `cp.apple.finalcutpro.plugins:titles([locale]) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the 'title' plugins. |
-| **Parameters** | - * `language` - The language code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
-| **Returns** | - * A table of the available plugins.
|
+| **Type** | Method |
+| **Description** | Finds the 'title' plugins. |
+| **Parameters** | locale - The locale code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
+| **Returns** | - A table of the available plugins.
|
#### [transitions](#transitions)
-| **Signature** | `cp.apple.finalcutpro.plugins:transitions([language]) -> table` |
+| **Signature** | `cp.apple.finalcutpro.plugins:transitions([locale]) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the 'transitions' plugins. |
+| **Parameters** | locale - The locale code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
+| **Returns** | - A table of the available plugins.
|
+
+#### [translateEffectBundle](#translateeffectbundle)
+| **Signature** | `cp.apple.finalcutpro.plugins:translateEffectBundle(input, locale) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Translates an Effect Bundle Item. |
+| **Parameters** | - input - The original name
- locale - The locale code you want to attempt to translate to
|
+| **Returns** | - The translated value for
input in the specified locale, if present.
|
+
+#### [unwatch](#unwatch)
+| **Signature** | `cp.apple.finalcutpro.plugins:unwatch(id) -> watcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the 'transitions' plugins. |
-| **Parameters** | - * `language` - The language code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
-| **Returns** | - * A table of the available plugins.
|
+| **Type** | Method |
+| **Description** | Unwatches a watcher with a specific ID. |
+| **Parameters** | - id - The ID of the watcher to stop watching.
|
+| **Returns** | |
#### [videoEffects](#videoeffects)
-| **Signature** | `cp.apple.finalcutpro.plugins:videoEffects([language]) -> table` |
+| **Signature** | `cp.apple.finalcutpro.plugins:videoEffects([locale]) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the 'video effect' plugins. |
-| **Parameters** | - * `language` - The language code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
-| **Returns** | - * A table of the available plugins.
|
+| **Type** | Method |
+| **Description** | Finds the 'video effect' plugins. |
+| **Parameters** | locale - The locale code to search for (e.g. "en"). Defaults to the current FCPX langauge.
|
+| **Returns** | - A table of the available plugins.
|
#### [watch](#watch)
-| **Signature** | `cp.apple.finalcutpro.plugins:watch(events) -> id` |
+| **Signature** | `cp.apple.finalcutpro.plugins:watch(events) -> watcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds a watcher for the provided events table. The table can have the following functions: |
+| **Type** | Method |
+| **Description** | Adds a watcher for the provided events table. |
+| **Parameters** | - events - A table of events to watch.
|
+| **Returns** | |
+| **Notes** | - The events can be: videoEffects audioEffects transitions titles ** generators
|
diff --git a/api/cp/cp.apple.finalcutpro.prefs.EditingPanel.md b/api/cp/cp.apple.finalcutpro.prefs.EditingPanel.md
new file mode 100644
index 0000000..c4800e8
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.prefs.EditingPanel.md
@@ -0,0 +1,66 @@
+# [docs](index.md) » cp.apple.finalcutpro.prefs.EditingPanel
+---
+
+Editing Panel Module.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [EditingPanel](#editingpanel)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [audioFadeDuration](#audiofadeduration)
+ * [positionPlayheadAfterEditOperation](#positionplayheadaftereditoperation)
+ * [showDetailedTrimmingFeedback](#showdetailedtrimmingfeedback)
+ * [showReferenceWaveforms](#showreferencewaveforms)
+ * [stillImageDuration](#stillimageduration)
+ * [transitionDuration](#transitionduration)
+
+## API Documentation
+
+### Constructors
+
+#### [EditingPanel](#editingpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel(preferencesDialog) -> EditingPanel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `EditingPanel` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
EditingPanel object.
|
+
+### Fields
+
+#### [audioFadeDuration](#audiofadeduration)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel.audioFadeDuration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Audio Fade Duration" `TextField` with a `number` value. |
+
+#### [positionPlayheadAfterEditOperation](#positionplayheadaftereditoperation)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel.positionPlayheadAfterEditOperation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Position playhead after edit operation" `CheckBox`. |
+
+#### [showDetailedTrimmingFeedback](#showdetailedtrimmingfeedback)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel.showDetailedTrimmingFeedback ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Show detailed trimming feedback" `CheckBox`. |
+
+#### [showReferenceWaveforms](#showreferencewaveforms)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel.showReferenceWaveforms ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Show reference waveforms" `CheckBox`. |
+
+#### [stillImageDuration](#stillimageduration)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel.stillImageDuration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Still image Duration" `TextField` with a `number` value. |
+
+#### [transitionDuration](#transitionduration)
+| **Signature** | `cp.apple.finalcutpro.prefs.EditingPanel.transitionDuration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Transition Duration" `TextField` with a `number` value. |
+
diff --git a/api/cp/cp.apple.finalcutpro.prefs.GeneralPanel.md b/api/cp/cp.apple.finalcutpro.prefs.GeneralPanel.md
new file mode 100644
index 0000000..2e06b7c
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.prefs.GeneralPanel.md
@@ -0,0 +1,43 @@
+# [docs](index.md) » cp.apple.finalcutpro.prefs.GeneralPanel
+---
+
+General Panel Module.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [TIME_DISPLAY](#time_display)
+* Functions - API calls offered directly by the extension
+ * [timeDisplay](#timedisplay)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [GeneralPanel](#generalpanel)
+
+## API Documentation
+
+### Constants
+
+#### [TIME_DISPLAY](#time_display)
+| **Signature** | `cp.apple.finalcutpro.prefs.GeneralPanel.TIME_DISPLAY -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The time display options. |
+
+### Functions
+
+#### [timeDisplay](#timedisplay)
+| **Signature** | `cp.apple.finalcutpro.prefs.GeneralPanel.timeDisplay([value]) -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets to sets the Time Display value. |
+| **Parameters** | - value - An optional value to set the Time Display.
|
+| **Returns** | - The time display if successful, otherwise
nil if an error occurs.
|
+
+### Constructors
+
+#### [GeneralPanel](#generalpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.GeneralPanel(preferencesDialog) -> GeneralPanel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `GeneralPanel` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
GeneralPanel object.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.prefs.ImportPanel.md b/api/cp/cp.apple.finalcutpro.prefs.ImportPanel.md
index fcd9120..c9901f2 100644
--- a/api/cp/cp.apple.finalcutpro.prefs.ImportPanel.md
+++ b/api/cp/cp.apple.finalcutpro.prefs.ImportPanel.md
@@ -4,6 +4,143 @@
Import Panel Module.
## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ImportPanel](#importpanel)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [analyzeAudioProblems](#analyzeaudioproblems)
+ * [analyzeBalanceColor](#analyzebalancecolor)
+ * [assignAudioRole](#assignaudiorole)
+ * [copyToMediaFolder](#copytomediafolder)
+ * [createOptimizedMedia](#createoptimizedmedia)
+ * [createProxyMedia](#createproxymedia)
+ * [findPeople](#findpeople)
+ * [findPeopleConsolidatedResults](#findpeopleconsolidatedresults)
+ * [findPeopleSmartCollections](#findpeoplesmartcollections)
+ * [iXMLRoles](#ixmlroles)
+ * [keywordsFromFinderTags](#keywordsfromfindertags)
+ * [keywordsFromFolders](#keywordsfromfolders)
+ * [leaveInPlace](#leaveinplace)
+ * [mediaLocationGroup](#medialocationgroup)
+ * [removeSilentChannels](#removesilentchannels)
+ * [separateMonoGroupStereoAudio](#separatemonogroupstereoaudio)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [toggleMediaLocation](#togglemedialocation)
## API Documentation
+### Constructors
+
+#### [ImportPanel](#importpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel(preferencesDialog) -> ImportPanel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ImportPanel` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
ImportPanel object.
|
+
+### Fields
+
+#### [analyzeAudioProblems](#analyzeaudioproblems)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.analyzeAudioProblems ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Analyze and fix audio problems" `CheckBox`. |
+
+#### [analyzeBalanceColor](#analyzebalancecolor)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.analyzeBalanceColor ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Analyze video for balance color" `CheckBox`. |
+
+#### [assignAudioRole](#assignaudiorole)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.assignAudioRole ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Assign Role" `PopUpButton`. |
+
+#### [copyToMediaFolder](#copytomediafolder)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.copyToMediaFolder ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Copy to library storage location" `RadioButton`. |
+
+#### [createOptimizedMedia](#createoptimizedmedia)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.createOptimizedMedia ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Create optimized media" `CheckBox`. |
+
+#### [createProxyMedia](#createproxymedia)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.createProxyMedia ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Create proxy media" `CheckBox`. |
+
+#### [findPeople](#findpeople)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.findPeople ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Find people" `CheckBox`. |
+
+#### [findPeopleConsolidatedResults](#findpeopleconsolidatedresults)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.findPeopleConsolidatedResults ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Consolidate find people results" `CheckBox`. |
+
+#### [findPeopleSmartCollections](#findpeoplesmartcollections)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.findPeopleSmartCollections ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Create Smart Collections after analysis" `CheckBox`. |
+
+#### [iXMLRoles](#ixmlroles)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.iXMLRoles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Assign iXML track names if available" `CheckBox`. |
+
+#### [keywordsFromFinderTags](#keywordsfromfindertags)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.keywordsFromFinderTags ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Keywords from Finder tags" `CheckBox`. |
+
+#### [keywordsFromFolders](#keywordsfromfolders)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.keywordsFromFolders ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Keywords from folders" `CheckBox`. |
+
+#### [leaveInPlace](#leaveinplace)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.leaveInPlace ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Leave files in place" `RadioButton`. |
+
+#### [mediaLocationGroup](#medialocationgroup)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.mediaLocationGroup ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `RadioGroup` containing the "Copy to library storage location" and "Leave files in place" options. |
+
+#### [removeSilentChannels](#removesilentchannels)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.removeSilentChannels ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Remove silent channels" `CheckBox`. |
+
+#### [separateMonoGroupStereoAudio](#separatemonogroupstereoaudio)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel.separateMonoGroupStereoAudio ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Separate mono and group stereo audio" `CheckBox`. |
+
+### Methods
+
+#### [toggleMediaLocation](#togglemedialocation)
+| **Signature** | `cp.apple.finalcutpro.prefs.ImportPanel:toggleMediaLocation() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` that toggles between the "Copy to library storage location" and "Leave files in place" options. |
+
diff --git a/api/cp/cp.apple.finalcutpro.prefs.Panel.md b/api/cp/cp.apple.finalcutpro.prefs.Panel.md
new file mode 100644
index 0000000..e4181f4
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.prefs.Panel.md
@@ -0,0 +1,30 @@
+# [docs](index.md) » cp.apple.finalcutpro.prefs.Panel
+---
+
+Preferences Panel.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [hide](#hide)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.prefs.Panel:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Hides the General Preferences Panel. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.prefs.Panel:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Shows the Panel. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.prefs.PlaybackPanel.md b/api/cp/cp.apple.finalcutpro.prefs.PlaybackPanel.md
index 04685ab..1a59ccd 100644
--- a/api/cp/cp.apple.finalcutpro.prefs.PlaybackPanel.md
+++ b/api/cp/cp.apple.finalcutpro.prefs.PlaybackPanel.md
@@ -4,6 +4,105 @@
Playback Panel Module.
## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [PlaybackPanel](#playbackpanel)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [avOutput](#avoutput)
+ * [backgroundRender](#backgroundrender)
+ * [backgroundRenderDelay](#backgroundrenderdelay)
+ * [createMulticamOptimizedMedia](#createmulticamoptimizedmedia)
+ * [playerBackground](#playerbackground)
+ * [postRollDuration](#postrollduration)
+ * [preRollDuration](#prerollduration)
+ * [renderShareGPU](#rendersharegpu)
+ * [showHDRAsToneMapped](#showhdrastonemapped)
+ * [warnAfterPlaybackOnDiskFrameDrop](#warnafterplaybackondiskframedrop)
+ * [warnAfterPlaybackOnVRFrameDrop](#warnafterplaybackonvrframedrop)
+ * [warnOnFrameDrop](#warnonframedrop)
## API Documentation
+### Constructors
+
+#### [PlaybackPanel](#playbackpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel(preferencesDialog) -> PlaybackPanel` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `PlaybackPanel` instance. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | - A new
PlaybackPanel object.
|
+
+### Fields
+
+#### [avOutput](#avoutput)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.avOutput ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `PopUpButton` for "A/V Output". |
+
+#### [backgroundRender](#backgroundrender)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.backgroundRender ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` for "Background render". |
+
+#### [backgroundRenderDelay](#backgroundrenderdelay)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.backgroundRenderDelay ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `TextField` for "Background render". |
+
+#### [createMulticamOptimizedMedia](#createmulticamoptimizedmedia)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.createMulticamOptimizedMedia ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` for "Create optimized media for multicam clips". |
+
+#### [playerBackground](#playerbackground)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.playerBackground ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `PopUpButton` for "Player Background". |
+
+#### [postRollDuration](#postrollduration)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.postRollDuration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `TextField` for "Post-Roll Duration" in seconds. |
+
+#### [preRollDuration](#prerollduration)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.preRollDuration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `TextField` for "Pre-Roll Duration" in seconds. |
+
+#### [renderShareGPU](#rendersharegpu)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.renderShareGPU ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `PopUpButton` for "Render/Share GPU". |
+
+#### [showHDRAsToneMapped](#showhdrastonemapped)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.showHDRAsToneMapped ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` for "Show HDR as Tone Mapped". |
+
+#### [warnAfterPlaybackOnDiskFrameDrop](#warnafterplaybackondiskframedrop)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.warnAfterPlaybackOnDiskFrameDrop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` for "If frames drop due to disk performance, warn after playback". |
+
+#### [warnAfterPlaybackOnVRFrameDrop](#warnafterplaybackonvrframedrop)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.warnAfterPlaybackOnVRFrameDrop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` for "If frames drop on VR headset, warn after playback". |
+
+#### [warnOnFrameDrop](#warnonframedrop)
+| **Signature** | `cp.apple.finalcutpro.prefs.PlaybackPanel.warnOnFrameDrop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `CheckBox` for "If a frame drops, stop playback and warn". |
+
diff --git a/api/cp/cp.apple.finalcutpro.prefs.PreferencesWindow.md b/api/cp/cp.apple.finalcutpro.prefs.PreferencesWindow.md
index 7616bca..5eb6fdc 100644
--- a/api/cp/cp.apple.finalcutpro.prefs.PreferencesWindow.md
+++ b/api/cp/cp.apple.finalcutpro.prefs.PreferencesWindow.md
@@ -4,6 +4,90 @@
Preferences Window Module.
## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [editingPanel](#editingpanel)
+ * [generalPanel](#generalpanel)
+ * [importPanel](#importpanel)
+ * [playbackPanel](#playbackpanel)
+ * [title](#title)
+ * [toolbar](#toolbar)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+ * [hide](#hide)
+ * [show](#show)
## API Documentation
+### Fields
+
+#### [editingPanel](#editingpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow.editingPanel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `EditingPanel` for the Preferences Window. |
+
+#### [generalPanel](#generalpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow.generalPanel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `GeneralPanel` for the Preferences Window. |
+
+#### [importPanel](#importpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow.importPanel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `ImportPanel` for the Preferences Window. |
+
+#### [playbackPanel](#playbackpanel)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow.playbackPanel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `PlaybackPanel` for the Preferences Window. |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `StaticText` for the Preferences Window title. |
+
+#### [toolbar](#toolbar)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow.toolbar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Toolbar` for the Preferences Window. |
+
+### Methods
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` that attempts to hide the Preferences window. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A `Statement` that attempts to show the Preferences window. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow:hide() -> PreferencesWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to hide the Preferences window. |
+| **Parameters** | |
+| **Returns** | - The same
PreferencesWindow, for chaining.
|
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.prefs.PreferencesWindow:show() -> PreferencesWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to show the Preferences window. |
+| **Parameters** | |
+| **Returns** | - The same
PreferencesWindow, for chaining.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.strings.md b/api/cp/cp.apple.finalcutpro.strings.md
new file mode 100644
index 0000000..b5b0bb6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.strings.md
@@ -0,0 +1,43 @@
+# [docs](index.md) » cp.apple.finalcutpro.strings
+---
+
+The `cp.strings` for I18N lookups related to Final Cut Pro.
+This has been populated with common lookups for user interface values
+that appear in Final Cut Pro.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [strings](#strings)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [find](#find)
+ * [findKeys](#findkeys)
+
+## API Documentation
+
+### Constants
+
+#### [strings](#strings)
+| **Signature** | `cp.apple.finalcutpro.strings ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The `cp.strings` providing access to common FCPX text values. |
+
+### Methods
+
+#### [find](#find)
+| **Signature** | `cp.apple.finalcutpro.strings:find(key[, locale][, quiet]]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Looks up an application string with the specified `key`. |
+| **Parameters** | key - The key to look up.locale - Optional locale to retrieve the key for, if available. May be a string or cp.i18n.localeID.quiet - Optional boolean, defaults to false. If true, no warnings are logged for missing keys.
|
+| **Returns** | - The requested string or
nil if the application is not running.
|
+
+#### [findKeys](#findkeys)
+| **Signature** | `cp.apple.finalcutpro.strings:findKeys(string[, lang]) -> {string}` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Looks up an application string and returns an array of keys that match. It will take into account current language the app is running in, or use `lang` if provided. |
+| **Parameters** | string - The string to look up.lang - The language (defaults to current FCPX language).
|
+| **Returns** | - The array of keys with a matching string.
|
+| **Notes** | - This method may be very inefficient, since it has to search through every possible key/value pair to find matches. It is not recommended that this is used in production.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Appearance.md b/api/cp/cp.apple.finalcutpro.timeline.Appearance.md
new file mode 100644
index 0000000..6388cf6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Appearance.md
@@ -0,0 +1,85 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Appearance
+---
+
+Timeline Appearance Module.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Appearance](#appearance)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [angles](#angles)
+ * [clipHeight](#clipheight)
+ * [clipNames](#clipnames)
+ * [clipRoles](#cliproles)
+ * [clipWaveformHeight](#clipwaveformheight)
+ * [laneHeaders](#laneheaders)
+ * [zoomAmount](#zoomamount)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [UI](#ui)
+
+## API Documentation
+
+### Constructors
+
+#### [Appearance](#appearance)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance(toggle) -> Appearance` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Appearance` instance. |
+| **Parameters** | - toggle - The parent CheckBox toggle.
|
+| **Returns** | |
+
+### Fields
+
+#### [angles](#angles)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.angles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Angles |
+
+#### [clipHeight](#clipheight)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.clipHeight ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Clip Height Slider. |
+
+#### [clipNames](#clipnames)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.clipNames ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Clip Names |
+
+#### [clipRoles](#cliproles)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.clipRoles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Clip Roles |
+
+#### [clipWaveformHeight](#clipwaveformheight)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.clipWaveformHeight ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Waveform Height Radio Group. |
+
+#### [laneHeaders](#laneheaders)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.laneHeaders ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Lane Headers |
+
+#### [zoomAmount](#zoomamount)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance.zoomAmount ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Zoom Slider. |
+
+### Methods
+
+#### [UI](#ui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Appearance:UI() -> Appearance` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hide the Timeline Appearance popup. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.AudioRole.md b/api/cp/cp.apple.finalcutpro.timeline.AudioRole.md
new file mode 100644
index 0000000..61fed39
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.AudioRole.md
@@ -0,0 +1,89 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.AudioRole
+---
+
+*Extends [Role](cp.apple.finalcutpro.timeline.Role.md)*
+
+A [Role](cp.apple.finalcutpro.timeline.Role.md) representing Audio.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [AudioRole](#audiorole)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [focusedInTimeline](#focusedintimeline)
+ * [subroleLanes](#subrolelanes)
+ * [subrolesExpanded](#subrolesexpanded)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doFocusInTimeline](#dofocusintimeline)
+ * [doHideSubroleLanes](#dohidesubrolelanes)
+ * [doShowSubroleLanes](#doshowsubrolelanes)
+ * [doUnfocusInTimeline](#dounfocusintimeline)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a "Audio" Role. |
+
+### Constructors
+
+#### [AudioRole](#audiorole)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
+### Fields
+
+#### [focusedInTimeline](#focusedintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole.focusedInTimeline ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [CheckBox](cp.ui.CheckBox.md) that toggles this role is larger than the other audio roles on the timeline. |
+
+#### [subroleLanes](#subrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole.subroleLanes ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [CheckButton](cp.ui.CheckButton.md) that toggles whether the subroles are visible in the [Timeline](cp.apple.finalcutpro.timeline.Timeline.md). |
+
+#### [subrolesExpanded](#subrolesexpanded)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole.subrolesExpanded ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [CheckButton](cp.ui.CheckButton.md) that toggles whether the roles are visible in the Index. |
+| **Notes** | |
+
+### Methods
+
+#### [doFocusInTimeline](#dofocusintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole:doFocusInTimeline() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to focus on this audio role in the timeline. |
+
+#### [doHideSubroleLanes](#dohidesubrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole:doHideSubroleLanes() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to hide the subrole lanes on this audio role in the timeline. |
+
+#### [doShowSubroleLanes](#doshowsubrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole:doShowSubroleLanes() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to show the subrole lanes on this audio role in the timeline. |
+
+#### [doUnfocusInTimeline](#dounfocusintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioRole:doUnfocusInTimeline() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to unfocus on this audio role in the timeline. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.AudioSubrole.md b/api/cp/cp.apple.finalcutpro.timeline.AudioSubrole.md
new file mode 100644
index 0000000..f57c39b
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.AudioSubrole.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.AudioSubrole
+---
+
+*Extends [Role](cp.apple.finalcutpro.timeline.Role.md)*
+
+A [Role](cp.apple.finalcutpro.timeline.Role.md) representing Audio.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [AudioSubrole](#audiosubrole)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioSubrole.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a "Audio" Subrole. |
+
+### Constructors
+
+#### [AudioSubrole](#audiosubrole)
+| **Signature** | `cp.apple.finalcutpro.timeline.AudioSubrole(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.CaptionsRole.md b/api/cp/cp.apple.finalcutpro.timeline.CaptionsRole.md
new file mode 100644
index 0000000..604af1c
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.CaptionsRole.md
@@ -0,0 +1,50 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.CaptionsRole
+---
+
+*Extends [Role](cp.apple.finalcutpro.timeline.Role.md)*
+
+A [Role](cp.apple.finalcutpro.timeline.Role.md) representing Captions.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [CaptionsRole](#captionsrole)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [subrolesExpanded](#subrolesexpanded)
+ * [visibleInViewer](#visibleinviewer)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsRole.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a "Captions" Role. |
+
+### Constructors
+
+#### [CaptionsRole](#captionsrole)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsRole(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
+### Fields
+
+#### [subrolesExpanded](#subrolesexpanded)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsRole.subrolesExpanded ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Button](cp.ui.Button.md) that toggles whether the sub-captions are visible. |
+
+#### [visibleInViewer](#visibleinviewer)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsRole.visibleInViewer ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [CheckBox](cp.ui.CheckBox.md) that toggles whether captions are visible in the [Viewer](cp.apple.finalcutpro.viewer.Viewer.md). |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.CaptionsSubrole.md b/api/cp/cp.apple.finalcutpro.timeline.CaptionsSubrole.md
new file mode 100644
index 0000000..e28aa14
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.CaptionsSubrole.md
@@ -0,0 +1,50 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.CaptionsSubrole
+---
+
+*Extends [Role](cp.apple.finalcutpro.timeline.Role.md)*
+
+A [Role](cp.apple.finalcutpro.timeline.Role.md) representing Captions.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [CaptionsSubrole](#captionssubrole)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [format](#format)
+ * [visibleInTimeline](#visibleintimeline)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsSubrole.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a "Captions" Subrole. |
+
+### Constructors
+
+#### [CaptionsSubrole](#captionssubrole)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsSubrole(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
+### Fields
+
+#### [format](#format)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsSubrole.format ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [StaticText](cp.ui.StaticText.md) which represents the subtitle format (e.g. "ITT", "SRT"). |
+
+#### [visibleInTimeline](#visibleintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.CaptionsSubrole.visibleInTimeline ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [CheckBox](cp.ui.CheckBox.md) that indicates if the subtitle track is visible in the Viewer. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Contents.md b/api/cp/cp.apple.finalcutpro.timeline.Contents.md
new file mode 100644
index 0000000..3879f4b
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Contents.md
@@ -0,0 +1,160 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Contents
+---
+
+Timeline Contents Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [clipsUI](#clipsui)
+ * [playheadClipsUI](#playheadclipsui)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [children](#children)
+ * [isFocused](#isfocused)
+ * [isLoaded](#isloaded)
+ * [playhead](#playhead)
+ * [scrollArea](#scrollarea)
+ * [scrollAreaUI](#scrollareaui)
+ * [selectedChildren](#selectedchildren)
+ * [skimmingPlayhead](#skimmingplayhead)
+ * [viewFrame](#viewframe)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doFocus](#dofocus)
+ * [doHide](#dohide)
+ * [doSelectClip](#doselectclip)
+ * [doSelectClips](#doselectclips)
+ * [doShow](#doshow)
+ * [rangeSelectionUI](#rangeselectionui)
+ * [selectedClipsUI](#selectedclipsui)
+
+## API Documentation
+
+### Functions
+
+#### [clipsUI](#clipsui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:clipsUI(expandedGroups, filterFn) -> table of axuielements` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a table containing the list of clips in the Timeline. |
+| **Parameters** | - expandGroups - (optional) if true, expand AXGroups to include contained AXLayoutItems
- filterFn - (optional) if provided, the function will be called to check each clip
|
+| **Returns** | - The table of axuielements that match the conditions
|
+
+#### [playheadClipsUI](#playheadclipsui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:playheadClipsUI(expandedGroups, filterFn) -> table of axuielements` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a table array containing the list of clips in the Timeline under the playhead, ordered with the |
+| **Parameters** | - expandGroups - (optional) if true, expand AXGroups to include contained AXLayoutItems
- filterFn - (optional) if provided, the function will be called to check each clip
|
+| **Returns** | - The table of axuielements that match the conditions
|
+
+### Fields
+
+#### [children](#children)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.children ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current set of child elements in the Contents. |
+
+#### [isFocused](#isfocused)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.isFocused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline is currently the focused panel. |
+
+#### [isLoaded](#isloaded)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.isLoaded ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline has content loaded. |
+
+#### [playhead](#playhead)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.playhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The main Playhead. |
+
+#### [scrollArea](#scrollarea)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.scrollArea ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `ScrollArea` for the Contents element. |
+
+#### [scrollAreaUI](#scrollareaui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.scrollAreaUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The parent `ScrollArea` UI of the Timeline Contents area. |
+
+#### [selectedChildren](#selectedchildren)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.selectedChildren ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current set of selected child elements in the Contents. |
+
+#### [skimmingPlayhead](#skimmingplayhead)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.skimmingPlayhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Playhead that tracks with the mouse pointer. |
+
+#### [viewFrame](#viewframe)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents.viewFrame ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current 'frame' of the internal timeline content, or `nil` if not available. |
+
+### Methods
+
+#### [doFocus](#dofocus)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:doFocus(show) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will focus on the `Contents`. |
+| **Parameters** | - show - if
true, the Contents will be shown before focusing.
|
+| **Returns** | |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to hide the Timeline Contents. |
+| **Returns** | |
+
+#### [doSelectClip](#doselectclip)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:doSelectClip(clipUI) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will select the specified single `hs._asm.axuielement` value in the Timeline Contents area. |
+| **Parameters** | - clipUI - The
hs._asm.axuilement values to select.
|
+| **Returns** | - A Statement that will select the clip or throw an error if there is an issue.
|
+
+#### [doSelectClips](#doselectclips)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:doSelectClips(clipsUI) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will select the specified list of `hs._asm.axuielement` values in the Timeline Contents area. |
+| **Parameters** | - clipsUI - The table of
hs._asm.axuilement values to select.
|
+| **Returns** | - A Statement that will select the clips or throw an error if there is an issue.
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to show the Timeline Contents. |
+| **Returns** | |
+
+#### [rangeSelectionUI](#rangeselectionui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:rangeSelectionUI() -> axuielements` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the UI for the current 'Range Selection', if present. |
+| **Parameters** | |
+| **Returns** | - The 'Range Selection' UI or
nil
|
+
+#### [selectedClipsUI](#selectedclipsui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Contents:selectedClipsUI(expandedGroups, filterFn) -> table of axuielements` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table containing the list of selected clips. |
+| **Parameters** | - expandGroups - (optional) if true, expand AXGroups to include contained AXLayoutItems
- filterFn - (optional) if provided, the function will be called to check each clip
|
+| **Returns** | - The table of selected axuielements that match the conditions
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Index.md b/api/cp/cp.apple.finalcutpro.timeline.Index.md
new file mode 100644
index 0000000..862b5ff
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Index.md
@@ -0,0 +1,122 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Index
+---
+
+Timeline Index Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Index](#index)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [captions](#captions)
+ * [clips](#clips)
+ * [mode](#mode)
+ * [roles](#roles)
+ * [search](#search)
+ * [tags](#tags)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [activeTab](#activetab)
+ * [doHide](#dohide)
+ * [doLayout](#dolayout)
+ * [doShow](#doshow)
+ * [saveLayout](#savelayout)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Index](#index)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index(parent, uiFinder) -> cp.apple.finalcutpro.timeline.Index` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Timeline Index. |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [captions](#captions)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.captions ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexCaptions](cp.apple.finalcutpro.timeline.IndexCaptions.md). |
+
+#### [clips](#clips)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.clips ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexClips](cp.apple.finalcutpro.timeline.IndexClips.md). |
+
+#### [mode](#mode)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.mode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexMode](cp.apple.finalcutpro.timeline.IndexMode.md) for the Index. |
+
+#### [roles](#roles)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.roles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexRoles](cp.apple.finalcutpro.timeline.IndexRoles.md). |
+
+#### [search](#search)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.search ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [SearchField](cp.ui.SearchField.md) for the Timeline Index. |
+
+#### [tags](#tags)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index.tags ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexTags](cp.apple.finalcutpro.timeline.IndexTags.md). |
+
+### Methods
+
+#### [activeTab](#activetab)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index:activeTab() -> object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the active tab. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) which will hide the Index if possible. |
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will apply the layout provided, if possible. |
+| **Parameters** | - layout - the
table containing the layout configuration. Usually created via the [#saveLayout] method.
|
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) which will show the Index if possible. |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.Index:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` containing the layout configuration for this class. |
+| **Parameters** | |
+| **Returns** | - The layout configuration
table.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexCaptions.md b/api/cp/cp.apple.finalcutpro.timeline.IndexCaptions.md
new file mode 100644
index 0000000..dcd9186
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexCaptions.md
@@ -0,0 +1,53 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexCaptions
+---
+
+Provides access to the 'Captions' section of the [Timeline Index](cp.apple.finalcutpro.timeline.Index.md)
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [activate](#activate)
+ * [list](#list)
+ * [viewErrors](#viewerrors)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doLayout](#dolayout)
+ * [saveLayout](#savelayout)
+
+## API Documentation
+
+### Fields
+
+#### [activate](#activate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexCaptions.activate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that activates the 'Captions' section. |
+
+#### [list](#list)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexCaptions.list ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of captions as a [Table](cp.ui.Table.md). |
+
+#### [viewErrors](#viewerrors)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexCaptions.viewErrors ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Button](cp.ui.Button.md) that will allow viewing errors in the Captions list. |
+
+### Methods
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexCaptions:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will apply the layout provided, if possible. |
+| **Parameters** | - layout - the
table containing the layout configuration. Usually created via the [#saveLayout] method.
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexCaptions:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` containing the layout configuration for this class. |
+| **Returns** | - The layout configuration
table.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexClips.Type.md b/api/cp/cp.apple.finalcutpro.timeline.IndexClips.Type.md
new file mode 100644
index 0000000..a19eec1
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexClips.Type.md
@@ -0,0 +1,45 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexClips.Type
+---
+
+The collection of [RadioButtons](cp.ui.RadioButton.md) that allow filtering by Video/Audio/Title.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [audio](#audio)
+ * [titles](#titles)
+ * [video](#video)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [matches](#matches)
+
+## API Documentation
+
+### Fields
+
+#### [audio](#audio)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.Type.audio ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Audio" filter. |
+
+#### [titles](#titles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.Type.titles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Titles" filter. |
+
+#### [video](#video)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.Type.video ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Video" filter. |
+
+### Methods
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.Type.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the `element` is the `IndexClips.Type` group. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexClips.md b/api/cp/cp.apple.finalcutpro.timeline.IndexClips.md
new file mode 100644
index 0000000..7c70d26
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexClips.md
@@ -0,0 +1,170 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexClips
+---
+
+*Extends [IndexSection](cp.apple.finalcutpro.timeline.IndexSection.md)*
+
+Provides access to the 'Clips' section of the [Timeline Index](cp.apple.finalcutpro.timeline.Index.md)
+
+## Submodules
+ * [cp.apple.finalcutpro.timeline.IndexClips.Type](cp.apple.finalcutpro.timeline.IndexClips.Type.md)
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [IndexClips](#indexclips)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [activate](#activate)
+ * [all](#all)
+ * [audio](#audio)
+ * [list](#list)
+ * [titles](#titles)
+ * [type](#type)
+ * [video](#video)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doFindAuditions](#dofindauditions)
+ * [doFindClipsContaining](#dofindclipscontaining)
+ * [doFindCompoundClips](#dofindcompoundclips)
+ * [doFindMissingMedia](#dofindmissingmedia)
+ * [doFindMulticams](#dofindmulticams)
+ * [doFindSynchronized](#dofindsynchronized)
+ * [doLayout](#dolayout)
+ * [doShowAll](#doshowall)
+ * [doShowAudio](#doshowaudio)
+ * [doShowTitles](#doshowtitles)
+ * [doShowVideo](#doshowvideo)
+ * [saveLayout](#savelayout)
+
+## API Documentation
+
+### Constructors
+
+#### [IndexClips](#indexclips)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips(index) -> IndexClips` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates the `IndexClips` instance. |
+| **Parameters** | - index - The Index instance.
|
+
+### Fields
+
+#### [activate](#activate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.activate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that activates the 'Clips' section. |
+
+#### [all](#all)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.all ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that will show "All" types of media. |
+
+#### [audio](#audio)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.audio ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Audio" filter. |
+
+#### [list](#list)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.list ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of clips as a [Table](cp.ui.Table.md). |
+
+#### [titles](#titles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.titles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Titles" filter. |
+
+#### [type](#type)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.type ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexClips.Type](cp.apple.finalcutpro.timeline.IndexClips.Type.md). |
+
+#### [video](#video)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips.video ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Video" filter. |
+
+### Methods
+
+#### [doFindAuditions](#dofindauditions)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doFindAuditions() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will use the index to search for all "Auditions". |
+
+#### [doFindClipsContaining](#dofindclipscontaining)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doFindClipsContaining(text) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.go.rx.Statement.md) that will use the index to search for clips containing the specified text. |
+| **Parameters** | - text - The text to search for.
|
+| **Returns** | |
+| **Notes** | - Because the
text can change each time, this result is not cached automatically. However as long as you are searching for the same text the result can be safely cached. The [#toFindMissingMedia] method does this, for example.
|
+
+#### [doFindCompoundClips](#dofindcompoundclips)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doFindCompoundClips() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will use the index to search for all "Compound Clips". |
+
+#### [doFindMissingMedia](#dofindmissingmedia)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doFindMissingMedia() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will use the index to search for all "Missing Media". |
+
+#### [doFindMulticams](#dofindmulticams)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doFindMulticams() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will use the index to search for all "Multicam" clips. |
+
+#### [doFindSynchronized](#dofindsynchronized)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doFindSynchronized() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will use the index to search for all "Synchronized" Clips. |
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will apply the layout provided, if possible. |
+| **Parameters** | - layout - the
table containing the layout configuration. Usually created via the [#saveLayout] method.
|
+| **Returns** | |
+
+#### [doShowAll](#doshowall)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doShowAll() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the clip index to "All" media types. |
+
+#### [doShowAudio](#doshowaudio)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doShowAudio() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the clip index to "Audio" media types. |
+
+#### [doShowTitles](#doshowtitles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doShowTitles() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the clip index to "Titles" media types. |
+
+#### [doShowVideo](#doshowvideo)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:doShowVideo() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the clip index to "Video" media types. |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexClips:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` containing the layout configuration for this class. |
+| **Returns** | - The layout configuration
table.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexMode.md b/api/cp/cp.apple.finalcutpro.timeline.IndexMode.md
new file mode 100644
index 0000000..69e08d5
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexMode.md
@@ -0,0 +1,64 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexMode
+---
+
+Timeline Index Mode Radio Group Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [IndexMode](#indexmode)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [captions](#captions)
+ * [clips](#clips)
+ * [roles](#roles)
+ * [tags](#tags)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexMode.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is the `IndexMode`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
+### Constructors
+
+#### [IndexMode](#indexmode)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexMode(index) -> cp.apple.finalcutpro.timeline.IndexMode` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `IndexMode` instance. |
+| **Parameters** | - index - The Index that contains the
mode.
|
+| **Returns** | - The new
IndexMode instance.
|
+
+### Fields
+
+#### [captions](#captions)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexMode.captions ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.ui) for the "Captions" mode. |
+
+#### [clips](#clips)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexMode.clips ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.ui) for the "Clips" mode. |
+
+#### [roles](#roles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexMode.roles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.ui) for the "Roles" mode. |
+
+#### [tags](#tags)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexMode.tags ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.ui) for the "Tags" mode. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexRoles.md b/api/cp/cp.apple.finalcutpro.timeline.IndexRoles.md
new file mode 100644
index 0000000..525c557
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexRoles.md
@@ -0,0 +1,208 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexRoles
+---
+
+Provides access to the 'Roles' section of the [Timeline Index](cp.apple.finalcutpro.timeline.Index.md)
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [activate](#activate)
+ * [area](#area)
+ * [collapseSubroles](#collapsesubroles)
+ * [editRoles](#editroles)
+ * [hideAudioLanes](#hideaudiolanes)
+ * [list](#list)
+ * [showAudioLanes](#showaudiolanes)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [allRoles](#allroles)
+ * [audioRoles](#audioroles)
+ * [captionRoles](#captionroles)
+ * [doActivate](#doactivate)
+ * [doCollapseSubroles](#docollapsesubroles)
+ * [doDeactivate](#dodeactivate)
+ * [doFocusInTimeline](#dofocusintimeline)
+ * [doHideAudioLanes](#dohideaudiolanes)
+ * [doHideSubroleLanes](#dohidesubrolelanes)
+ * [doLayout](#dolayout)
+ * [doShowAudioLanes](#doshowaudiolanes)
+ * [doShowSubroleLanes](#doshowsubrolelanes)
+ * [doUnfocusInTimeline](#dounfocusintimeline)
+ * [fineRoleTitled](#fineroletitled)
+ * [saveLayout](#savelayout)
+ * [videoRoles](#videoroles)
+
+## API Documentation
+
+### Fields
+
+#### [activate](#activate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.activate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that activates the 'Roles' section. |
+
+#### [area](#area)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.area ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexRolesArea](cp.apple.finalcutpro.timeline.IndexRolesArea.md) containing the list of [Role](cp.apple.finalcutpro.timeline.Role.md). |
+
+#### [collapseSubroles](#collapsesubroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.collapseSubroles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Collapse Subroles` [Button](cp.ui.Button.md). |
+
+#### [editRoles](#editroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.editRoles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Edit Roles...` [Button](cp.ui.Button.md). |
+
+#### [hideAudioLanes](#hideaudiolanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.hideAudioLanes ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Hide Audio Lanes` [Button](cp.ui.Button.md). |
+
+#### [list](#list)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.list ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexRolesList](cp.apple.finalcutpro.timeline.IndexRolesList.md) for the roles. |
+
+#### [showAudioLanes](#showaudiolanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles.showAudioLanes ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `Show Audio Lanes` [Button](cp.ui.Button.md). |
+
+### Methods
+
+#### [allRoles](#allroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:allRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds all Roles, optionally including all Subroles |
+| **Parameters** | - includeSubroles - (defaults to
false) if true include subroles.
|
+| **Returns** | - The table of Roles, or
nil if no UI is available.
|
+
+#### [audioRoles](#audioroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:audioRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds all Audio Roles, optionally including all Subroles |
+| **Parameters** | - includeSubroles - (defaults to
false) if true include subroles.
|
+| **Returns** | - The table of Roles, or
nil if no UI is available.
|
+
+#### [captionRoles](#captionroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:captionRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds all Caption Roles, optionally including all Subroles |
+| **Parameters** | - includeSubroles - (defaults to
false) if true include subroles.
|
+| **Returns** | - The table of Roles, or
nil if no UI is available.
|
+
+#### [doActivate](#doactivate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doActivate(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will activate the provided role, if it is available. |
+| **Parameters** | - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doCollapseSubroles](#docollapsesubroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doCollapseSubroles() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will collapse subroles, if they are currently expanded. |
+
+#### [doDeactivate](#dodeactivate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doDeactivate(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will deactivate the provided role, if it is available. |
+| **Parameters** | - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doFocusInTimeline](#dofocusintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doFocusInTimeline(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will focus the listed role, if it is available and is an [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md). |
+| **Parameters** | - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doHideAudioLanes](#dohideaudiolanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doHideAudioLanes() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will collapse subroles (if necessary) and hide the audio lanes. |
+
+#### [doHideSubroleLanes](#dohidesubrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doHideSubroleLanes(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will hide the subrole lanes for the listed role, if it is available and is an [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md). |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will apply the layout provided, if possible. |
+| **Parameters** | - layout - the
table containing the layout configuration. Usually created via the [#saveLayout] method.
|
+| **Returns** | |
+
+#### [doShowAudioLanes](#doshowaudiolanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doShowAudioLanes() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show the Audio Lanes when executed. |
+
+#### [doShowSubroleLanes](#doshowsubrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doShowSubroleLanes(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will show subrole lanes for the role, if it is available and is an [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md). |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doUnfocusInTimeline](#dounfocusintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:doUnfocusInTimeline(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will unfocus the listed role, if it is available and is an [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md). |
+| **Parameters** | - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [fineRoleTitled](#fineroletitled)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:fineRoleTitled(title) -> Role or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the [Role](cp.apple.finalcutpro.timeline.Role.md) with the specified title. |
+| **Parameters** | - title - The title to match.
|
+| **Returns** | - The Role with the title, or
nil.
|
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` containing the layout configuration for this class. |
+| **Returns** | - The layout configuration
table.
|
+
+#### [videoRoles](#videoroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRoles:videoRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds all Video Roles, optionally including all Subroles |
+| **Parameters** | - includeSubroles - (defaults to
false) if true include subroles.
|
+| **Returns** | - The table of Roles, or
nil if no UI is available.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexRolesArea.md b/api/cp/cp.apple.finalcutpro.timeline.IndexRolesArea.md
new file mode 100644
index 0000000..3e51974
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexRolesArea.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexRolesArea
+---
+
+Represents the list of Roles in the [IndexRoles](cp.apple.finalcutpro.timeline.IndexRoles.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [list](#list)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesArea.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `element` matches an `IndexRolesArea`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
+### Fields
+
+#### [list](#list)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesArea.list ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Outline](cp.ui.Outline.md) that serves as the list of the scroll area. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexRolesList.md b/api/cp/cp.apple.finalcutpro.timeline.IndexRolesList.md
new file mode 100644
index 0000000..99db591
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexRolesList.md
@@ -0,0 +1,118 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexRolesList
+---
+
+Timeline Index Roles List.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [allRoles](#allroles)
+ * [audioRoles](#audioroles)
+ * [doActivate](#doactivate)
+ * [doDeactivate](#dodeactivate)
+ * [doFocusInTimeline](#dofocusintimeline)
+ * [doHideSubroleLanes](#dohidesubrolelanes)
+ * [doShowSubroleLanes](#doshowsubrolelanes)
+ * [doUnfocusInTimeline](#dounfocusintimeline)
+ * [filterRoles](#filterroles)
+ * [findRoleTitled](#findroletitled)
+ * [videoRoles](#videoroles)
+
+## API Documentation
+
+### Methods
+
+#### [allRoles](#allroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:allRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of caption [Role](cp.ui.Role.md)s in the current list. |
+| **Parameters** | - includeSubroles - if
true, include Subroles, otherwise exclude them.
|
+| **Returns** | - A
table of Roles, or nil if no UI is available currently.
|
+
+#### [audioRoles](#audioroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:audioRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of all audio [Role](cp.ui.Role.md)s in the current list. |
+| **Parameters** | - includeSubroles - if
true, include Subroles, otherwise exclude them.
|
+| **Returns** | - A
table of Roles, or nil if no UI is available currently.
|
+
+#### [doActivate](#doactivate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:doActivate(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will activate the provided role, if it is available. |
+| **Parameters** | - title - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doDeactivate](#dodeactivate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:doDeactivate(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will deactivate the provided role, if it is available. |
+| **Parameters** | - title - The title of the Role to deactivate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doFocusInTimeline](#dofocusintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:doFocusInTimeline(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will focus the provided [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md), if it is available. |
+| **Parameters** | - title - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doHideSubroleLanes](#dohidesubrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:doHideSubroleLanes(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will hide subrole lanes for the provided [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md), if it is available. |
+| **Parameters** | - title - The title of the Role.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doShowSubroleLanes](#doshowsubrolelanes)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:doShowSubroleLanes(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will show subrole lanes for the provided [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md), if it is available. |
+| **Parameters** | - title - The title of the Role.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [doUnfocusInTimeline](#dounfocusintimeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:doUnfocusInTimeline(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will unfocus the provided [AudioRole](cp.apple.finalcutpro.timeline.AudioRole.md), if it is available. |
+| **Parameters** | - title - The title of the Role to activate.
|
+| **Returns** | |
+| **Notes** | - The title can be the English name (eg. "Dialogue", "Music", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [filterRoles](#filterroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:filterRoles([matcherFn]) -> table of Roles or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Filters the current list of [Role](cp.apple.finalcutpro.timeline.Role.md)s based on the given `matchesFn` predicate. |
+| **Parameters** | - matchesFn - the matcher function. If not provided, no additional filtering occurs.
|
+| **Returns** | - The table of Role, or
nil if no UI is currently available.
|
+
+#### [findRoleTitled](#findroletitled)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:findRoleTitled(title) -> Role or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the [Role](cp.apple.finalcutpro.timeline.Role.md) with the specified title. |
+| **Parameters** | - title - The title of the role to find.
|
+| **Returns** | - The Role, or
nil if it can't be found.
|
+| **Notes** | - The title can be the English name (eg. "Video", "Titles", etc.) for default Roles, and it will find the correct role in the current FCPX language.
|
+
+#### [videoRoles](#videoroles)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexRolesList:videoRoles([includeSubroles]) -> table of Roles` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of all video [Role](cp.ui.Role.md)s in the current list. |
+| **Parameters** | - includeSubroles - if
true, include Subroles, otherwise exclude them.
|
+| **Returns** | - A
table of Roles, or nil if no UI is available currently.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexSection.md b/api/cp/cp.apple.finalcutpro.timeline.IndexSection.md
new file mode 100644
index 0000000..369a196
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexSection.md
@@ -0,0 +1,95 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexSection
+---
+
+An abstract base class for sections inside the [Index](cp.apple.finalcutpro.timeline.Index.md).
+This contains common methods and other definitions that apply for all sections.
+
+This will generally not be created directly, but will be created via subclass such as
+[IndexClips](cp.apple.finalcutpro.timeline.IndexClips.md).
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [IndexSection](#indexsection)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [activate](#activate)
+ * [index](#index)
+ * [isShowing](#isshowing)
+ * [search](#search)
+ * [UI](#ui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [doActivateSearch](#doactivatesearch)
+ * [doShow](#doshow)
+ * [parent](#parent)
+
+## API Documentation
+
+### Constructors
+
+#### [IndexSection](#indexsection)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection(index) -> IndexSection` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates the `IndexSection` instance. |
+| **Parameters** | - index - The Index instance.
|
+
+### Fields
+
+#### [activate](#activate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection.activate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that activates the section. |
+| **Notes** | - Must be overridden in subclasses to provide the actual RadioButton.
|
+
+#### [index](#index)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection.index ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The parent [Index](cp.apple.finalcutpro.timeline.Index.md). |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the section is currently showing. |
+
+#### [search](#search)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection.search ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The shared [SearchField](cp.ui.SearchField.md) for the [Index](cp.apple.finalcutpro.timeline.Index.md) |
+
+#### [UI](#ui)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection.UI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` that represents the item. |
+
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection:app() -> cp.apple.finalcutpro` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The [Final Cut Pro](cp.apple.finalcutpro.md) instance. |
+
+#### [doActivateSearch](#doactivatesearch)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection:doActivateSearch() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will show the Clips in the Timeline Index and focus on the Search field. |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show the Clips section in the Timeline Index, if possible. |
+| **Returns** | |
+
+#### [parent](#parent)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexSection:parent() -> cp.apple.finalcutpro.timeline.Index` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The parent index. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexTags.Type.md b/api/cp/cp.apple.finalcutpro.timeline.IndexTags.Type.md
new file mode 100644
index 0000000..42062e6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexTags.Type.md
@@ -0,0 +1,66 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexTags.Type
+---
+
+The collection of [RadioButtons](cp.ui.RadioButton.md) that allow filtering by Video/Audio/Title.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [analysisKeywords](#analysiskeywords)
+ * [chapters](#chapters)
+ * [completeTodos](#completetodos)
+ * [incompleteTodos](#incompletetodos)
+ * [keywords](#keywords)
+ * [standardMarkers](#standardmarkers)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [matches](#matches)
+
+## API Documentation
+
+### Fields
+
+#### [analysisKeywords](#analysiskeywords)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.analysisKeywords ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Auto-analysis keywords" filter. |
+
+#### [chapters](#chapters)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.chapters ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Chapter markers" filter. |
+
+#### [completeTodos](#completetodos)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.completeTodos ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Complete todo marker" filter. |
+
+#### [incompleteTodos](#incompletetodos)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.incompleteTodos ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Incomplete todo marker" filter. |
+
+#### [keywords](#keywords)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.keywords ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Keywords" filter. |
+
+#### [standardMarkers](#standardmarkers)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.standardMarkers ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Show standard markers" filter. |
+
+### Methods
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.Type.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the `element` is the `IndexTags.Type` group. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.IndexTags.md b/api/cp/cp.apple.finalcutpro.timeline.IndexTags.md
new file mode 100644
index 0000000..e8ed5d9
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.IndexTags.md
@@ -0,0 +1,154 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.IndexTags
+---
+
+Provides access to the 'Tags' section of the [Timeline Index](cp.apple.finalcutpro.timeline.Index.md)
+
+## Submodules
+ * [cp.apple.finalcutpro.timeline.IndexTags.Type](cp.apple.finalcutpro.timeline.IndexTags.Type.md)
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [activate](#activate)
+ * [all](#all)
+ * [analysisKeywords](#analysiskeywords)
+ * [chapters](#chapters)
+ * [completeTodos](#completetodos)
+ * [incompleteTodos](#incompletetodos)
+ * [keywords](#keywords)
+ * [list](#list)
+ * [standardMarkers](#standardmarkers)
+ * [type](#type)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doLayout](#dolayout)
+ * [doShowAll](#doshowall)
+ * [doShowAnalysisKeywords](#doshowanalysiskeywords)
+ * [doShowChapters](#doshowchapters)
+ * [doShowCompleteTodos](#doshowcompletetodos)
+ * [doShowIncompleteTodos](#doshowincompletetodos)
+ * [doShowKeywords](#doshowkeywords)
+ * [doShowStandardMarkers](#doshowstandardmarkers)
+ * [saveLayout](#savelayout)
+
+## API Documentation
+
+### Fields
+
+#### [activate](#activate)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.activate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that activates the 'Tags' section. |
+
+#### [all](#all)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.all ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) that will show "All" types of media. |
+
+#### [analysisKeywords](#analysiskeywords)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.analysisKeywords ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Auto-analysis keywords" filter. |
+
+#### [chapters](#chapters)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.chapters ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Chapter markers" filter. |
+
+#### [completeTodos](#completetodos)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.completeTodos ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Complete todo marker" filter. |
+
+#### [incompleteTodos](#incompletetodos)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.incompleteTodos ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Incomplete todo marker" filter. |
+
+#### [keywords](#keywords)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.keywords ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Keywords" filter. |
+
+#### [list](#list)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.list ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of tags as a [Table](cp.ui.Table.md). |
+
+#### [standardMarkers](#standardmarkers)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.standardMarkers ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Standard markers" filter. |
+
+#### [type](#type)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags.type ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [IndexTags.Type](cp.apple.finalcutpro.timeline.IndexTags.Type.md). |
+
+### Methods
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will apply the layout provided, if possible. |
+| **Parameters** | - layout - the
table containing the layout configuration. Usually created via the [#saveLayout] method.
|
+| **Returns** | |
+
+#### [doShowAll](#doshowall)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowAll() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "All" media types. |
+
+#### [doShowAnalysisKeywords](#doshowanalysiskeywords)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowAnalysisKeywords() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "Analysis Keywords". |
+
+#### [doShowChapters](#doshowchapters)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowChapters() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "Chapter" markers. |
+
+#### [doShowCompleteTodos](#doshowcompletetodos)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowCompleteTodos() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "Complete Todos". |
+
+#### [doShowIncompleteTodos](#doshowincompletetodos)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowIncompleteTodos() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "Incomplete Todo Markers". |
+
+#### [doShowKeywords](#doshowkeywords)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowKeywords() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "Keywords". |
+
+#### [doShowStandardMarkers](#doshowstandardmarkers)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:doShowStandardMarkers() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will set the tag index to "Standard" markers. |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.apple.finalcutpro.timeline.IndexTags:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` containing the layout configuration for this class. |
+| **Returns** | - The layout configuration
table.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Role.md b/api/cp/cp.apple.finalcutpro.timeline.Role.md
new file mode 100644
index 0000000..75881cb
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Role.md
@@ -0,0 +1,125 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Role
+---
+
+*Extends [Row](cp.ui.Row.md)*
+
+Represents a Role in the [Timeline Index](cp.apple.finalcutpro.timeline.Index.md).
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [TITLE_KEY](#title_key)
+ * [TYPE](#type)
+* Functions - API calls offered directly by the extension
+ * [findTitle](#findtitle)
+ * [is](#is)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Role](#role)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [active](#active)
+ * [cellUI](#cellui)
+ * [subroleRow](#subrolerow)
+ * [title](#title)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doActivate](#doactivate)
+ * [doDeactivate](#dodeactivate)
+ * [type](#type)
+
+## API Documentation
+
+### Constants
+
+#### [TITLE_KEY](#title_key)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.TITLE_KEY ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Contains the list of [strings](cp.apple.finalcutpro.strings.md) used for default roles. |
+| **Notes** | - CAPTIONS - "Captions"
- VIDEO - "Video"
- TITLES - "Titles"
- DIALOGUE - "Dialogue"
- MUSIC - "Music"
- EFFECTS - "Effects"
|
+
+#### [TYPE](#type)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.TYPE ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Contains the set of role types. |
+| **Notes** | - VIDEO - A Video Role
- AUDIO - An Audio Role
- CAPTION - A Caption Role
|
+
+### Functions
+
+#### [findTitle](#findtitle)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.findTitle(title) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if FCPX is not currently running in English, it will check if the title is one |
+
+#### [is](#is)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Role`. |
+| **Parameters** | thing - The thing to check
|
+| **Returns** | true if the thing is a Table instance.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `element` is a `Role`. |
+| **Parameters** | - element - the
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
+### Constructors
+
+#### [Role](#role)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role(parent, uiFinder, type)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates the new Role. Typically this is not called directly, but rather by one of the |
+| **Parameters** | - parent - The parent Element
- uiFinder - The
function or cp.prop that provides the axuielement. - type - The [#TYPE] of Role.
|
+| **Returns** | |
+
+### Fields
+
+#### [active](#active)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.active ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) that determines if the `Role` is active in the timeline. |
+
+#### [cellUI](#cellui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.cellUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The AXCell `axuielement` containing the Role details. |
+
+#### [subroleRow](#subrolerow)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.subroleRow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | This is `true` if the `Role` is an Subrole [Row](cp.ui.Row.md). |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [StaticText](cp.ui.StaticText.md) containing the title. |
+
+### Methods
+
+#### [doActivate](#doactivate)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role:doActivate() -> cp.rx.go.Statement.md` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will activate the current role, if possible. |
+
+#### [doDeactivate](#dodeactivate)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role:doDeactivate() -> cp.rx.go.Statement.md` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will deactivate the current role, if possible. |
+
+#### [type](#type)
+| **Signature** | `cp.apple.finalcutpro.timeline.Role:type() -> cp.apple.finalcut.timeline.Role.TYPE` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the type of Role this is. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.SpeedPopover.md b/api/cp/cp.apple.finalcutpro.timeline.SpeedPopover.md
new file mode 100644
index 0000000..786445e
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.SpeedPopover.md
@@ -0,0 +1,111 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.SpeedPopover
+---
+
+*Extends [Timeline](cp.apple.finalcutpro.timeline.md)*
+
+Represents the Speed Popover.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [SpeedPopover](#speedpopover)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [direction](#direction)
+ * [duration](#duration)
+ * [durationValue](#durationvalue)
+ * [forward](#forward)
+ * [rate](#rate)
+ * [rateValue](#ratevalue)
+ * [reverse](#reverse)
+ * [ripple](#ripple)
+ * [setSpeed](#setspeed)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doShow](#doshow)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a "Video" Role. |
+
+### Constructors
+
+#### [SpeedPopover](#speedpopover)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
+### Fields
+
+#### [direction](#direction)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:direction ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioGroup](cp.ui.RadioGroup.md) for the "Direction" radio group. |
+
+#### [duration](#duration)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:duration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Forward" radio button. |
+
+#### [durationValue](#durationvalue)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:durationValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [TextField](cp.ui.TextField.md) for the "Duration" text field. |
+
+#### [forward](#forward)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:forward ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Forward" radio button. |
+
+#### [rate](#rate)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:rate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Forward" radio button. |
+
+#### [rateValue](#ratevalue)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:rateValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [TextField](cp.ui.TextField.md) for the "Rate" text field. |
+
+#### [reverse](#reverse)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:reverse ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) for the "Reverse" radio button. |
+
+#### [ripple](#ripple)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:ripple ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) for the "Ripple" checkbox. |
+
+#### [setSpeed](#setspeed)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:setSpeed ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioGroup](cp.ui.RadioGroup.md) for the "Set Speed" radio group. |
+
+### Methods
+
+#### [doShow](#doshow)
+| **Signature** | `cp.apple.finalcutpro.timeline.SpeedPopover:doShow() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will show the Speed Popover. |
+| **Parameters** | |
+| **Returns** | - A
Statement which will send true if it successful, or false otherwise.
|
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Timeline.md b/api/cp/cp.apple.finalcutpro.timeline.Timeline.md
new file mode 100644
index 0000000..dfa1602
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Timeline.md
@@ -0,0 +1,272 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Timeline
+---
+
+Timeline Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+ * [matchesMain](#matchesmain)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Timeline](#timeline)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contents](#contents)
+ * [effects](#effects)
+ * [index](#index)
+ * [isFocused](#isfocused)
+ * [isLoaded](#isloaded)
+ * [isLockedInCentre](#islockedincentre)
+ * [isLockedPlayhead](#islockedplayhead)
+ * [isOnPrimary](#isonprimary)
+ * [isOnSecondary](#isonsecondary)
+ * [isPlaying](#isplaying)
+ * [isShowing](#isshowing)
+ * [mainUI](#mainui)
+ * [playhead](#playhead)
+ * [rangeSelected](#rangeselected)
+ * [skimmingPlayhead](#skimmingplayhead)
+ * [speedPopover](#speedpopover)
+ * [title](#title)
+ * [toolbar](#toolbar)
+ * [transitions](#transitions)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [doFocus](#dofocus)
+ * [doHide](#dohide)
+ * [doOpenProject](#doopenproject)
+ * [doShowOnPrimary](#doshowonprimary)
+ * [doShowOnSecondary](#doshowonsecondary)
+ * [hide](#hide)
+ * [show](#show)
+ * [showOnPrimary](#showonprimary)
+ * [showOnSecondary](#showonsecondary)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false.
|
+| **Notes** | element should be an AXGroup, which contains an AXSplitGroup with an AXIdentifier of _NS:237 (as of Final Cut Pro 10.4)
|
+
+#### [matchesMain](#matchesmain)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.matchesMain(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+| **Notes** | element should be an AXSplitGroup with an AXIdentifier of _NS:237 (as of Final Cut Pro 10.4)- Because the timeline contents is hard to detect, we look for the timeline toolbar instead.
|
+
+### Constructors
+
+#### [Timeline](#timeline)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline(app) -> Timeline` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Timeline` instance. |
+| **Parameters** | - app - The
cp.apple.finalcutpro object.
|
+| **Returns** | |
+
+### Fields
+
+#### [contents](#contents)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.contents ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Timeline Contents. The Content is the main body of the timeline, |
+
+#### [effects](#effects)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.effects ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The (sometimes hidden) Effect Browser. |
+
+#### [index](#index)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.index ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Index](cp.apple.finalcutpro.timeline.Index.md). |
+
+#### [isFocused](#isfocused)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isFocused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline is the focused panel. |
+
+#### [isLoaded](#isloaded)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isLoaded ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline has finished loading. |
+
+#### [isLockedInCentre](#islockedincentre)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isLockedInCentre ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is Playhead Locked in the centre? |
+
+#### [isLockedPlayhead](#islockedplayhead)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isLockedPlayhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is Playhead Locked? |
+
+#### [isOnPrimary](#isonprimary)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isOnPrimary ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline is on the Primary Display. |
+
+#### [isOnSecondary](#isonsecondary)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isOnSecondary ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline is on the Secondary Display. |
+
+#### [isPlaying](#isplaying)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isPlaying ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the timeline playing? |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Timeline is showing on either the Primary or Secondary display. |
+
+#### [mainUI](#mainui)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.mainUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` representing the 'timeline', or `nil` if not available. |
+
+#### [playhead](#playhead)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.playhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Timeline Playhead. |
+
+#### [rangeSelected](#rangeselected)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.rangeSelected ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if a range is selected in the timeline. |
+
+#### [skimmingPlayhead](#skimmingplayhead)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.skimmingPlayhead ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Playhead that tracks under the mouse while skimming. |
+
+#### [speedPopover](#speedpopover)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.speedPopover ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [SpeedPopover](cp.apple.finalcutpro.timeline.SpeedPopover.md). |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [StaticText](cp.ui.StaticText.md) containing the title. |
+
+#### [toolbar](#toolbar)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.toolbar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The bar at the top of the timeline. |
+
+#### [transitions](#transitions)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline.transitions ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The (sometimes hidden) Transitions Browser. |
+
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:app() -> App` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the app instance representing Final Cut Pro. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doFocus](#dofocus)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:doFocus() -> cp.rx.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to focus on the Timeline. |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will hide the Timeline (regardless of whether it |
+| **Parameters** | |
+| **Returns** | - A
Statement ready to run.
|
+
+#### [doOpenProject](#doopenproject)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:doOpenProject(title) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Opens a project from the timeline navigation popups. |
+| **Parameters** | - title - The title of the project you want to open.
|
+| **Returns** | |
+| **Notes** | - The title supports patterns, so you can do things like:
require("cp.apple.finalcutpro").timeline:doOpenProject("Audio.*"):Now()
|
+
+#### [doShowOnPrimary](#doshowonprimary)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:doShowOnPrimary() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the timeline is in the primary window. |
+| **Parameters** | - timeout - The timeout period for the operation.
|
+| **Returns** | - A
Statement which will send true if it successful, or false otherwise.
|
+
+#### [doShowOnSecondary](#doshowonsecondary)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:doShowOnSecondary() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the timeline is in the secondary window. |
+| **Parameters** | - timeout - The timeout period for the operation.
|
+| **Returns** | - A
Statement which will send true if it successful, or false otherwise.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:hide() -> Timeline` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hide's the Timeline (regardless of whether it was on the Primary or Secondary display). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:show() -> Timeline` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the Timeline on the Primary Display. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showOnPrimary](#showonprimary)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:showOnPrimary() -> Timeline` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the Timeline on the Primary Display. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showOnSecondary](#showonsecondary)
+| **Signature** | `cp.apple.finalcutpro.timeline.Timeline:showOnSecondary() -> Timeline` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the Timeline on the Secondary Display. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Toolbar.Browser.md b/api/cp/cp.apple.finalcutpro.timeline.Toolbar.Browser.md
new file mode 100644
index 0000000..ef3c7f4
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Toolbar.Browser.md
@@ -0,0 +1,26 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Toolbar.Browser
+---
+
+A [RadioGroup](cp.ui.RadioGroup.md) that contains buttons to show or hide the Effects and Transitions Browsers.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [effects](#effects)
+ * [transitions](#transitions)
+
+## API Documentation
+
+### Fields
+
+#### [effects](#effects)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.Browser.effects ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) which toggles the 'Effects' browser visibility. |
+
+#### [transitions](#transitions)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.Browser.transitions ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [RadioButton](cp.ui.RadioButton.md) which toggles the 'Transitions' browser visibility. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Toolbar.Skimming.md b/api/cp/cp.apple.finalcutpro.timeline.Toolbar.Skimming.md
new file mode 100644
index 0000000..d715a52
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Toolbar.Skimming.md
@@ -0,0 +1,40 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Toolbar.Skimming
+---
+
+Provides access to mouse/trackpad skimming options.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [active](#active)
+ * [audio](#audio)
+ * [snapping](#snapping)
+ * [solo](#solo)
+
+## API Documentation
+
+### Fields
+
+#### [active](#active)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.Skimming.active ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) that indicates if video/audio skimming is active. |
+
+#### [audio](#audio)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.Skimming.audio ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) that indicates if audio is played while skimming. |
+
+#### [snapping](#snapping)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.Skimming.snapping ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) that indicates if snapping is enabled. |
+
+#### [solo](#solo)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.Skimming.solo ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) that indicates if audio is soloing the selected clip(s). |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.Toolbar.md b/api/cp/cp.apple.finalcutpro.timeline.Toolbar.md
new file mode 100644
index 0000000..ff70bc6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.Toolbar.md
@@ -0,0 +1,110 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.Toolbar
+---
+
+Timeline Toolbar
+
+## Submodules
+ * [cp.apple.finalcutpro.timeline.Toolbar.Browser](cp.apple.finalcutpro.timeline.Toolbar.Browser.md)
+ * [cp.apple.finalcutpro.timeline.Toolbar.Skimming](cp.apple.finalcutpro.timeline.Toolbar.Skimming.md)
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Toolbar](#toolbar)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [appearance](#appearance)
+ * [appearanceToggle](#appearancetoggle)
+ * [back](#back)
+ * [browser](#browser)
+ * [duration](#duration)
+ * [forward](#forward)
+ * [index](#index)
+ * [skimming](#skimming)
+ * [skimmingGroup](#skimminggroup)
+ * [title](#title)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a Toolbar. |
+| **Parameters** | - element - the
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
+### Constructors
+
+#### [Toolbar](#toolbar)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar(timeline) -> cp.apple.finalcutpro.timeline.Toolbar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Toolbar with the specified parent. |
+| **Parameters** | |
+| **Returns** | - The new Toolbar instance.
|
+
+### Fields
+
+#### [appearance](#appearance)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.appearance ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Appearance](cp.apple.finalcutpro.timeline.Appearance.md) button/palette control. |
+
+#### [appearanceToggle](#appearancetoggle)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.appearanceToggle ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `CheckBox` field which will toggle the `appearance` popover. |
+
+#### [back](#back)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.back ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Button](cp.ui.Button.md) for "go back in timeline history". |
+
+#### [browser](#browser)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.browser ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Toolbar.Browser](cp.apple.finalcutpro.timeline.Toolbar.Browser.md) containing buttons that will toggle the Effects/Transitions browsers. |
+
+#### [duration](#duration)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.duration ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The duration [StaticText](cp.ui.StaticText.md) from the Timeline Titlebar. |
+
+#### [forward](#forward)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.forward ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Button](cp.ui.Button.md) for "go forward in timeline history". |
+
+#### [index](#index)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.index ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [CheckBox](cp.ui.CheckBox.md) which indicates if the Timeline Index is visible. |
+
+#### [skimming](#skimming)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.skimming ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Skimming](cp.apple.finalcutpro.timeline.Toolbar.Skimming.md) group of checkbox items. |
+
+#### [skimmingGroup](#skimminggroup)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.skimmingGroup ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Group](cp.ui.Group.md) containing buttons relating to mouse skimming behaviour, waveforms, snapping, etc. |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.timeline.Toolbar.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The title [StaticText](cp.ui.StaticText.md) from the Timeline Titlebar. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.VideoRole.md b/api/cp/cp.apple.finalcutpro.timeline.VideoRole.md
new file mode 100644
index 0000000..87d7d88
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.VideoRole.md
@@ -0,0 +1,43 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.VideoRole
+---
+
+*Extends [Role](cp.apple.finalcutpro.timeline.Role.md)*
+
+A [Role](cp.apple.finalcutpro.timeline.Role.md) representing Video clips.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [VideoRole](#videorole)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [subrolesExpanded](#subrolesexpanded)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.timeline.VideoRole.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a "Video" Role. |
+
+### Constructors
+
+#### [VideoRole](#videorole)
+| **Signature** | `cp.apple.finalcutpro.timeline.VideoRole(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
+### Fields
+
+#### [subrolesExpanded](#subrolesexpanded)
+| **Signature** | `cp.apple.finalcutpro.timeline.VideoRole.subrolesExpanded ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Button](cp.ui.Button.md) that toggles whether the sub-captions are visible. |
+
diff --git a/api/cp/cp.apple.finalcutpro.timeline.VideoSubrole.md b/api/cp/cp.apple.finalcutpro.timeline.VideoSubrole.md
new file mode 100644
index 0000000..7409014
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.timeline.VideoSubrole.md
@@ -0,0 +1,23 @@
+# [docs](index.md) » cp.apple.finalcutpro.timeline.VideoSubrole
+---
+
+*Extends [Role](cp.apple.finalcutpro.timeline.Role.md)*
+
+A [Role](cp.apple.finalcutpro.timeline.Role.md) representing Captions.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [VideoSubrole](#videosubrole)
+
+## API Documentation
+
+### Constructors
+
+#### [VideoSubrole](#videosubrole)
+| **Signature** | `cp.apple.finalcutpro.timeline.VideoSubrole(parent, uiFinder)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.viewer.ControlBar.md b/api/cp/cp.apple.finalcutpro.viewer.ControlBar.md
new file mode 100644
index 0000000..9eeada6
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.viewer.ControlBar.md
@@ -0,0 +1,44 @@
+# [docs](index.md) » cp.apple.finalcutpro.viewer.ControlBar
+---
+
+Represents the bottom "control" bar on a [Viewer](cp.apple.finalcutpro.viewer.Viewer.md)
+which contains the play/pause button, timecode, audio meters, etc.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ControlBar](#controlbar)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [timecode](#timecode)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.viewer.ControlBar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a `ControlBar` instance. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches the pattern for a Viewer ControlBar.
|
+
+### Constructors
+
+#### [ControlBar](#controlbar)
+| **Signature** | `cp.apple.finalcutpro.viewer.ControlBar(viewer)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ControlBar` instance. |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [timecode](#timecode)
+| **Signature** | `cp.apple.finalcutpro.viewer.ControlBar.timecode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current timecode value, with the format "hh:mm:ss:ff". Setting also supports "hh:mm:ss;ff". |
+
diff --git a/api/cp/cp.apple.finalcutpro.viewer.InfoBar.md b/api/cp/cp.apple.finalcutpro.viewer.InfoBar.md
new file mode 100644
index 0000000..a2d5ccd
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.viewer.InfoBar.md
@@ -0,0 +1,87 @@
+# [docs](index.md) » cp.apple.finalcutpro.viewer.InfoBar
+---
+
+Represents the bar of information about the [Viewer](cp.apple.finalcutpro.viewer.Viewer.md) (format, title, viewing options).
+
+See also [ControlBar](cp.apple.finalcutpro.viewer.ControlBar.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [InfoBar](#infobar)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [format](#format)
+ * [formatField](#formatfield)
+ * [framerate](#framerate)
+ * [title](#title)
+ * [titleField](#titlefield)
+ * [viewMenu](#viewmenu)
+ * [zoomwMenu](#zoomwmenu)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is an `InfoBar` instance. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it matches the pattern for a Viewer InfoBar.
|
+
+### Constructors
+
+#### [InfoBar](#infobar)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar(viewer)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `InfoBar` instance. |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [format](#format)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar.format ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the full format text value, or `nil` if not available. |
+
+#### [formatField](#formatfield)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar.formatField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "Field" value for the current clip, as a [StaticText](cp.ui.StaticText.md) |
+
+#### [framerate](#framerate)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar.framerate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the framerate as a number, or `nil` if not available. |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the Title of the clip in the Viewer as a [StaticText](cp.ui.StaticText.md). |
+
+#### [titleField](#titlefield)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar.titleField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the Title of the clip in the Viewer as a [StaticText](cp.ui.StaticText.md). |
+
+#### [viewMenu](#viewmenu)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar:viewMenu ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [MenuButton](cp.ui.MenuButton.md) for the "View" menu. |
+
+#### [zoomwMenu](#zoomwmenu)
+| **Signature** | `cp.apple.finalcutpro.viewer.InfoBar:zoomwMenu ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [MenuButton](cp.ui.MenuButton.md) for the "Zoom Level" menu. |
+
diff --git a/api/cp/cp.apple.finalcutpro.viewer.Viewer.md b/api/cp/cp.apple.finalcutpro.viewer.Viewer.md
new file mode 100644
index 0000000..91db220
--- /dev/null
+++ b/api/cp/cp.apple.finalcutpro.viewer.Viewer.md
@@ -0,0 +1,248 @@
+# [docs](index.md) » cp.apple.finalcutpro.viewer.Viewer
+---
+
+Viewer Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Viewer](#viewer)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [betterQuality](#betterquality)
+ * [contentsUI](#contentsui)
+ * [controlBar](#controlbar)
+ * [frame](#frame)
+ * [framerate](#framerate)
+ * [getFormat](#getformat)
+ * [hasPlayerControls](#hasplayercontrols)
+ * [infoBar](#infobar)
+ * [isEventViewer](#iseventviewer)
+ * [isMainViewer](#ismainviewer)
+ * [isOnPrimary](#isonprimary)
+ * [isOnSecondary](#isonsecondary)
+ * [playButton](#playbutton)
+ * [playerQuality](#playerquality)
+ * [timecode](#timecode)
+ * [timecodeField](#timecodefield)
+ * [title](#title)
+ * [usingProxies](#usingproxies)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [currentWindow](#currentwindow)
+ * [doHide](#dohide)
+ * [doShowOnPrimary](#doshowonprimary)
+ * [doShowOnSecondary](#doshowonsecondary)
+ * [hide](#hide)
+ * [notifier](#notifier)
+ * [showOnPrimary](#showonprimary)
+ * [showOnSecondary](#showonsecondary)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Viewer](#viewer)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer(app, eventViewer) -> Viewer` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Viewer` instance. |
+| **Parameters** | - app - The FCP application.
- eventViewer - If
true, the viewer is the Event Viewer.
|
+| **Returns** | |
+
+### Fields
+
+#### [betterQuality](#betterquality)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.betterQuality ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the viewer is using playing with better quality (`true`) or performance (`false). |
+
+#### [contentsUI](#contentsui)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.contentsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the `axuielement` for the media contents of the Viewer, or `nil` if not available. |
+
+#### [controlBar](#controlbar)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.controlBar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the [ControlBar](cp.apple.finalcutpro.viewer.ControlBar.md) for this `Viewer`. |
+
+#### [frame](#frame)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.frame ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the current frame for the viewer, or `nil` if it is not available. |
+
+#### [framerate](#framerate)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.framerate ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the framerate as a number, or nil if not available. |
+
+#### [getFormat](#getformat)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.getFormat ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the format text value, or `nil` if none is available. |
+
+#### [hasPlayerControls](#hasplayercontrols)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.hasPlayerControls ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the viewer has Player Controls visible. |
+
+#### [infoBar](#infobar)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.infoBar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the [InfoBar](cp.apple.finalcutpro.viewer.InfoBar.md) for this `Viewer`. |
+
+#### [isEventViewer](#iseventviewer)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.isEventViewer ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if this is the Event Viewer. |
+
+#### [isMainViewer](#ismainviewer)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.isMainViewer ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if this is the main Viewer. |
+
+#### [isOnPrimary](#isonprimary)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.isOnPrimary ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Viewer is showing on the Primary Window. |
+
+#### [isOnSecondary](#isonsecondary)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.isOnSecondary ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Checks if the Viewer is showing on the Secondary Window. |
+
+#### [playButton](#playbutton)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.playButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Play [Button](cp.ui.Button.md) object. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [playerQuality](#playerquality)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.playerQuality ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current player quality value. |
+
+#### [timecode](#timecode)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.timecode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current timecode value, with the format "hh:mm:ss:ff". Setting also supports "hh:mm:ss;ff". |
+
+#### [timecodeField](#timecodefield)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.timecodeField ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [StaticText](cp.ui.StaticText.md) containing the timecode value. |
+
+#### [title](#title)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides the Title of the clip in the Viewer as a [StaticText](cp.ui.StaticText.md) |
+
+#### [usingProxies](#usingproxies)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer.usingProxies ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the viewer is using Proxies (`true`) or Optimized/Original media (`false`). |
+
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:app() -> application` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the application. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [currentWindow](#currentwindow)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:currentWindow() -> PrimaryWindow | SecondaryWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the current window object. |
+| **Parameters** | |
+| **Returns** | - The
PrimaryWindow or the SecondaryWindow.
|
+
+#### [doHide](#dohide)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that hides the Viewer. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true, or sends an error.
|
+
+#### [doShowOnPrimary](#doshowonprimary)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:doShowOnPrimary() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the Viewer on the Primary display. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which resolves to true, or sends an error message.
|
+
+#### [doShowOnSecondary](#doshowonsecondary)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:doShowOnSecondary() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the Viewer on the Secondary display. |
+| **Parameters** | |
+| **Returns** | - The
Statement, resolving to true, or sending an error message.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the Viewer. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [notifier](#notifier)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:notifier() -> cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `notifier` that is tracking the application UI element. It has already been started. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showOnPrimary](#showonprimary)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:showOnPrimary() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Viewer on the Primary display. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [showOnSecondary](#showonsecondary)
+| **Signature** | `cp.apple.finalcutpro.viewer.Viewer:showOnSecondary() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Viewer on the Seconary display. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.apple.finalcutpro.windowfilter.md b/api/cp/cp.apple.finalcutpro.windowfilter.md
deleted file mode 100644
index bbcb500..0000000
--- a/api/cp/cp.apple.finalcutpro.windowfilter.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# [docs](index.md) » cp.apple.finalcutpro.windowfilter
----
-
-Window Filter for Final Cut Pro.
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.apple.motion.app.md b/api/cp/cp.apple.motion.app.md
new file mode 100644
index 0000000..544065e
--- /dev/null
+++ b/api/cp/cp.apple.motion.app.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.apple.motion.app
+---
+
+The `cp.app` for Apple's Motion.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.apple.motion.md b/api/cp/cp.apple.motion.md
new file mode 100644
index 0000000..65942c7
--- /dev/null
+++ b/api/cp/cp.apple.motion.md
@@ -0,0 +1,97 @@
+# [docs](index.md) » cp.apple.motion
+---
+
+Represents the Motion application, providing functions that allow different tasks to be accomplished.
+
+## Submodules
+ * [cp.apple.motion.app](cp.apple.motion.app.md)
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [BUNDLE_ID](#bundle_id)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [bundleID](#bundleid)
+ * [doRestart](#dorestart)
+ * [hide](#hide)
+ * [launch](#launch)
+ * [notifier](#notifier)
+ * [path](#path)
+ * [quit](#quit)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [BUNDLE_ID](#bundle_id)
+| **Signature** | `cp.apple.motion.BUNDLE_ID` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Compressor's Bundle ID |
+
+### Methods
+
+#### [bundleID](#bundleid)
+| **Signature** | `cp.apple.motion:bundleID() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the Compressor Bundle ID |
+| **Parameters** | |
+| **Returns** | - A string of the Compressor Bundle ID
|
+
+#### [doRestart](#dorestart)
+| **Signature** | `cp.apple.motion:doRestart() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will restart the application. |
+| **Parameters** | |
+| **Returns** | true if the application was running and restarted successfully.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.apple.motion:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides Compressor |
+| **Parameters** | |
+| **Returns** | |
+
+#### [launch](#launch)
+| **Signature** | `cp.apple.motion:launch([waitSeconds]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Launches Compressor, or brings it to the front if it was already running. |
+| **Parameters** | - waitSeconds - if provided, we will wait for up to the specified seconds for the launch to complete.
|
+| **Returns** | true if Compressor was either launched or focused, otherwise false (e.g. if Compressor doesn't exist)
|
+
+#### [notifier](#notifier)
+| **Signature** | `cp.apple.motion:notifier() -> cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a notifier that is tracking the application UI element. It has already been started. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [path](#path)
+| **Signature** | `cp.apple.motion:path() -> string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Path to Compressor Application |
+| **Parameters** | |
+| **Returns** | - A string containing Compressor's filesystem path, or
nil if the bundle identifier could not be located
|
+
+#### [quit](#quit)
+| **Signature** | `cp.apple.motion:quit([waitSeconds]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Quits Compressor |
+| **Parameters** | - waitSeconds - if provided, we will wait for the specified time for the quit to complete before returning.
|
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.apple.motion:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Activate Compressor |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.battery.md b/api/cp/cp.battery.md
new file mode 100644
index 0000000..af8d9b8
--- /dev/null
+++ b/api/cp/cp.battery.md
@@ -0,0 +1,181 @@
+# [docs](index.md) » cp.battery
+---
+
+Provides access to various properties of the battery. Each of these properties
+is a `cp.prop`, so it can be watched for changes. For example:
+
+```lua
+local battery = require("cp.battery")
+battery.powerSupply:watch(function(value)
+ print("Now using "..value)
+end)
+```
+
+This will `print` "Now using AC Power" or "Now using Battery Power" whenever the
+power supply changes.
+
+By default the watcher initialises in a "stopped" state, and must be started for
+the `cp.prop` watchers to trigger.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [amperage](#amperage)
+ * [capacity](#capacity)
+ * [cycles](#cycles)
+ * [designCapacity](#designcapacity)
+ * [health](#health)
+ * [healthCondition](#healthcondition)
+ * [isCharged](#ischarged)
+ * [isCharging](#ischarging)
+ * [isFinishingCharge](#isfinishingcharge)
+ * [maxCapacity](#maxcapacity)
+ * [otherBatteryInfo](#otherbatteryinfo)
+ * [percentage](#percentage)
+ * [psuSerial](#psuserial)
+ * [timeRemaining](#timeremaining)
+ * [timeToFullCharge](#timetofullcharge)
+ * [voltage](#voltage)
+ * [watts](#watts)
+* Variables - Configurable values
+ * [_watcher](#_watcher)
+* Functions - API calls offered directly by the extension
+ * [start](#start)
+ * [stop](#stop)
+
+## API Documentation
+
+### Constants
+
+#### [amperage](#amperage)
+| **Signature** | `cp.battery.amperage ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the amount of current flowing through the battery, in mAh. |
+| **Notes** | - A number containing the amount of current flowing through the battery. The value may be: Less than zero if the battery is being discharged (i.e. the computer is running on battery power) Zero if the battery is being neither charged nor discharded** Greater than zero if the bettery is being charged
|
+
+#### [capacity](#capacity)
+| **Signature** | `cp.battery.capacity ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the current capacity of the battery in mAh. |
+| **Notes** | - This is the measure of how charged the battery is, vs the value of
cp.battery.maxCapacity().
|
+
+#### [cycles](#cycles)
+| **Signature** | `cp.battery.cycles ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the number of discharge cycles of the battery. |
+| **Notes** | - One cycle is a full discharge of the battery, followed by a full charge. This may also be an aggregate of many smaller discharge-then-charge cycles (e.g. 10 iterations of discharging the battery from 100% to 90% and then charging back to 100% each time, is considered to be one cycle).
|
+
+#### [designCapacity](#designcapacity)
+| **Signature** | `cp.battery.designCapacity ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the design capacity of the battery in mAh. |
+
+#### [health](#health)
+| **Signature** | `cp.battery.health ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the health status of the battery; either "Good", "Fair" or "Poor", |
+
+#### [healthCondition](#healthcondition)
+| **Signature** | `cp.battery.healthCondition ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the health condition status of the battery: |
+
+#### [isCharged](#ischarged)
+| **Signature** | `cp.battery.isCharged ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Checks if the battery is fully charged. |
+
+#### [isCharging](#ischarging)
+| **Signature** | `cp.battery.isCharging ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Checks if the battery is currently charging. |
+
+#### [isFinishingCharge](#isfinishingcharge)
+| **Signature** | `cp.battery.isFinishingCharge ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Checks if the battery is trickle charging; |
+
+#### [maxCapacity](#maxcapacity)
+| **Signature** | `cp.battery.maxCapacity ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the maximum capacity of the battery in mAh. |
+| **Notes** | - This may exceed the value of
cp.battery.designCapacity() due to small variations in the production chemistry vs the design.
|
+
+#### [otherBatteryInfo](#otherbatteryinfo)
+| **Signature** | `cp.battery.otherBatteryInfo ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns information about non-PSU batteries (e.g. bluetooth accessories). If none are found, `nil` is returned. |
+
+#### [percentage](#percentage)
+| **Signature** | `cp.battery.percentage ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the current source of power; either `"AC Power"`, `"Battery Power"` or `"Off Line"`. |
+
+#### [psuSerial](#psuserial)
+| **Signature** | `cp.battery.psuSerial ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the serial number of the attached power supply, or `0` if not present. |
+
+#### [timeRemaining](#timeremaining)
+| **Signature** | `cp.battery.timeRemaining ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The amount of battery life remaining, in minuges. |
+| **Notes** | - The return value may be: Greater than zero to indicate the number of minutes remaining.
-1 if the remaining batttery life is being calculated.** -2 if there is unlimited time remaining (i.e. the system is on AC power).
|
+
+#### [timeToFullCharge](#timetofullcharge)
+| **Signature** | `cp.battery.timeToFullCharge ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the time remaining for the battery to be fully charged, in minutes, or `-`` if still being calculated. |
+
+#### [voltage](#voltage)
+| **Signature** | `cp.battery.voltage ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the current voltage of the battery in mV. |
+
+#### [watts](#watts)
+| **Signature** | `cp.battery.watts ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns the power entering or leaving the battery, in W. |
+
+### Variables
+
+#### [_watcher](#_watcher)
+| **Signature** | `cp.battery._watcher -> hs.battery.watcher object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | The battery watcher. |
+
+### Functions
+
+#### [start](#start)
+| **Signature** | `cp.battery.start() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Starts the battery watcher. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [stop](#stop)
+| **Signature** | `cp.battery.stop() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Stops the battery watcher. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.bench.md b/api/cp/cp.bench.md
index 4ffac31..681ef2e 100644
--- a/api/cp/cp.bench.md
+++ b/api/cp/cp.bench.md
@@ -7,7 +7,7 @@ TIME FUNCTION EXECUTION:
Use this to benchmark sections of code. Wrap them in a function inside this
function call. Eg:
-local _bench = require("hs.bench")
+local _bench = require("cp.bench")
local foo = _bench("Foo Test", function()
return do.somethingHere()
diff --git a/api/cp/cp.blackmagic.resolve.app.md b/api/cp/cp.blackmagic.resolve.app.md
new file mode 100644
index 0000000..83608d0
--- /dev/null
+++ b/api/cp/cp.blackmagic.resolve.app.md
@@ -0,0 +1,29 @@
+# [docs](index.md) » cp.blackmagic.resolve.app
+---
+
+The `cp.app` for Blackmagic DaVinci Resolve.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [app](#app)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [application](#application)
+
+## API Documentation
+
+### Constants
+
+#### [app](#app)
+| **Signature** | `cp.blackmagic.resolve.app ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The `cp.app` for DaVinci Resolve. |
+
+### Fields
+
+#### [application](#application)
+| **Signature** | `cp.blackmagic.resolve.application ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the running `hs.application` for DaVinci Resolve, or `nil` if it's not running. |
+
diff --git a/api/cp/cp.blackmagic.resolve.color.Color.md b/api/cp/cp.blackmagic.resolve.color.Color.md
new file mode 100644
index 0000000..de4933d
--- /dev/null
+++ b/api/cp/cp.blackmagic.resolve.color.Color.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.blackmagic.resolve.color.Color
+---
+
+Color Module.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Color](#color)
+
+## API Documentation
+
+### Constructors
+
+#### [Color](#color)
+| **Signature** | `cp.blackmagic.resolve.color.Color(app) -> Color` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Color` instance. |
+| **Parameters** | - app - The Final Cut Pro app instance.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.blackmagic.resolve.color.Tracker.md b/api/cp/cp.blackmagic.resolve.color.Tracker.md
new file mode 100644
index 0000000..9a07966
--- /dev/null
+++ b/api/cp/cp.blackmagic.resolve.color.Tracker.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.blackmagic.resolve.color.Tracker
+---
+
+Tracker
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.blackmagic.resolve.main.PrimaryWindow.md b/api/cp/cp.blackmagic.resolve.main.PrimaryWindow.md
new file mode 100644
index 0000000..12e7a1e
--- /dev/null
+++ b/api/cp/cp.blackmagic.resolve.main.PrimaryWindow.md
@@ -0,0 +1,63 @@
+# [docs](index.md) » cp.blackmagic.resolve.main.PrimaryWindow
+---
+
+Primary Window Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [PrimaryWindow](#primarywindow)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [doShow](#doshow)
+ * [resolve](#resolve)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.blackmagic.resolve.main.PrimaryWindow.matches(w) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if a window matches the PrimaryWindow requirements |
+| **Parameters** | |
+| **Returns** | true if matched otherwise false
|
+
+### Constructors
+
+#### [PrimaryWindow](#primarywindow)
+| **Signature** | `cp.blackmagic.resolve.main.PrimaryWindow(app) -> PrimaryWindow object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new PrimaryWindow. |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [doShow](#doshow)
+| **Signature** | `cp.blackmagic.resolve.main.PrimaryWindow:doShow() -> PrimaryWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that attempts to show the Primary Window. |
+| **Returns** | - The
Statement, which resolves as either true or sends an error.
|
+
+#### [resolve](#resolve)
+| **Signature** | `cp.blackmagic.resolve.main.PrimaryWindow.resolve -> cp.blackmagic.resolve` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The main `Resolve` application root. |
+
+### Methods
+
+#### [show](#show)
+| **Signature** | `cp.blackmagic.resolve.main.PrimaryWindow:show() -> PrimaryWindow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Primary Window. |
+| **Parameters** | |
+| **Returns** | - The
PrimaryWindow instance.
|
+
diff --git a/api/cp/cp.blackmagic.resolve.md b/api/cp/cp.blackmagic.resolve.md
new file mode 100644
index 0000000..43b6fdc
--- /dev/null
+++ b/api/cp/cp.blackmagic.resolve.md
@@ -0,0 +1,252 @@
+# [docs](index.md) » cp.blackmagic.resolve
+---
+
+The Blackmagic DaVinci Resolve Extension.
+
+## Submodules
+ * [cp.blackmagic.resolve.app](cp.blackmagic.resolve.app.md)
+ * [cp.blackmagic.resolve.color](cp.blackmagic.resolve.color.md)
+ * [cp.blackmagic.resolve.main](cp.blackmagic.resolve.main.md)
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
+ * [preferences](#preferences)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [Color](#color)
+ * [currentLocale](#currentlocale)
+ * [isFrontmost](#isfrontmost)
+ * [isInstalled](#isinstalled)
+ * [isModalDialogOpen](#ismodaldialogopen)
+ * [isRunning](#isrunning)
+ * [isShowing](#isshowing)
+ * [isSupported](#issupported)
+ * [isUnsupported](#isunsupported)
+ * [primaryWindow](#primarywindow)
+ * [supportedLocales](#supportedlocales)
+ * [UI](#ui)
+ * [version](#version)
+ * [versionString](#versionstring)
+ * [windowsUI](#windowsui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [bundleID](#bundleid)
+ * [doHide](#dohide)
+ * [doLaunch](#dolaunch)
+ * [doQuit](#doquit)
+ * [doRestart](#dorestart)
+ * [doShow](#doshow)
+ * [getPath](#getpath)
+ * [hide](#hide)
+ * [launch](#launch)
+ * [notifier](#notifier)
+ * [quit](#quit)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [EARLIEST_SUPPORTED_VERSION](#earliest_supported_version)
+| **Signature** | `cp.blackmagic.resolve.EARLIEST_SUPPORTED_VERSION ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The earliest version this API supports. |
+
+#### [preferences](#preferences)
+| **Signature** | `cp.blackmagic.resolve.preferences ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The `cp.app.prefs` for DaVinci Resolve. |
+
+### Fields
+
+#### [Color](#color)
+| **Signature** | `cp.blackmagic.resolve.Color ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The Color Workspace. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [currentLocale](#currentlocale)
+| **Signature** | `cp.blackmagic.resolve.currentLocale ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets and sets the current locale for FCPX. |
+
+#### [isFrontmost](#isfrontmost)
+| **Signature** | `cp.blackmagic.resolve:isFrontmost ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is DaVinci Resolve Frontmost? |
+
+#### [isInstalled](#isinstalled)
+| **Signature** | `cp.blackmagic.resolve.isInstalled ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is any version of DaVinci Resolve Installed? |
+
+#### [isModalDialogOpen](#ismodaldialogopen)
+| **Signature** | `cp.blackmagic.resolve:isModalDialogOpen ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is a modal dialog currently open? |
+
+#### [isRunning](#isrunning)
+| **Signature** | `cp.blackmagic.resolve.isRunning ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is DaVinci Resolve Running? |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.blackmagic.resolve.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is Final Cut visible on screen? |
+
+#### [isSupported](#issupported)
+| **Signature** | `cp.blackmagic.resolve.isSupported ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is a supported version of DaVinci Resolve installed? |
+
+#### [isUnsupported](#isunsupported)
+| **Signature** | `cp.blackmagic.resolve.isUnsupported ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is an unsupported version of DaVinci Resolve installed? |
+
+#### [primaryWindow](#primarywindow)
+| **Signature** | `cp.blackmagic.resolve.primaryWindow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The DaVinci Resolve Primary Window. |
+
+#### [supportedLocales](#supportedlocales)
+| **Signature** | `cp.blackmagic.resolve.supportedLocales ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of supported locales for this version of FCPX. |
+
+#### [UI](#ui)
+| **Signature** | `cp.blackmagic.resolve.UI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The DaVinci Resolve `axuielement`, if available. |
+
+#### [version](#version)
+| **Signature** | `cp.blackmagic.resolve.version ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The version number of the running or default installation of FCPX as a `semver`. |
+
+#### [versionString](#versionstring)
+| **Signature** | `cp.blackmagic.resolve.versionString ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The version number of the running or default installation of FCPX as a `string`. |
+
+#### [windowsUI](#windowsui)
+| **Signature** | `cp.blackmagic.resolve.windowsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the UI containing the list of windows in the app. |
+
+### Methods
+
+#### [bundleID](#bundleid)
+| **Signature** | `cp.blackmagic.resolve:bundleID() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the Bundle ID for the app. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.blackmagic.resolve:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will hide the FCP. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doLaunch](#dolaunch)
+| **Signature** | `cp.blackmagic.resolve:doLaunch() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will launch, or focus it if already running FCP. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doQuit](#doquit)
+| **Signature** | `cp.blackmagic.resolve:doQuit() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will quit FCP. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [doRestart](#dorestart)
+| **Signature** | `cp.blackmagic.resolve:doRestart() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.cp) that will restart DaVinci Resolve, if it is running. If not, nothing happens. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.blackmagic.resolve:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show FCP on-screen. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute.
|
+
+#### [getPath](#getpath)
+| **Signature** | `cp.blackmagic.resolve:getPath() -> string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Path to DaVinci Resolve Application |
+| **Parameters** | |
+| **Returns** | - A string containing DaVinci Resolve's filesystem path, or nil if DaVinci Resolve's path could not be determined.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.blackmagic.resolve:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides DaVinci Resolve |
+| **Parameters** | |
+| **Returns** | |
+
+#### [launch](#launch)
+| **Signature** | `cp.blackmagic.resolve:launch([waitSeconds], [path]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Launches DaVinci Resolve, or brings it to the front if it was already running. |
+| **Parameters** | waitSeconds - If provided, the number of seconds to wait until the launch completes. If nil, it will return immediately.path - An optional full path to an application without an extension (i.e /Applications/DaVinci Resolve 10.3.4). This allows you to load previous versions of the application.
|
+| **Returns** | |
+
+#### [notifier](#notifier)
+| **Signature** | `cp.blackmagic.resolve:notifier() -> cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a notifier that is tracking the application UI element. It has already been started. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [quit](#quit)
+| **Signature** | `cp.blackmagic.resolve:quit([waitSeconds]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Quits DaVinci Resolve, if it's running. |
+| **Parameters** | - waitSeconds - The number of seconds to wait for the quit to complete.
|
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.blackmagic.resolve:show() -> cp.blackmagic.resolve` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Activate DaVinci Resolve, if it is running. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.choices.builder.md b/api/cp/cp.choices.builder.md
index 427331a..2b98582 100644
--- a/api/cp/cp.choices.builder.md
+++ b/api/cp/cp.choices.builder.md
@@ -8,6 +8,7 @@ Choices Builder Module.
* [new](#new)
* Methods - API calls which can only be made on an object returned by a constructor
* [id](#id)
+ * [image](#image)
* [params](#params)
* [subText](#subtext)
* [text](#text)
@@ -19,42 +20,50 @@ Choices Builder Module.
#### [new](#new)
| **Signature** | `cp.choices.builder.new(choiceType) -> builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new choice builder instance. |
-| **Parameters** | - * `choice` - The choice instance to configure.
|
-| **Returns** | - * The new choice builder.
|
+| **Type** | Function |
+| **Description** | Creates a new choice builder instance. |
+| **Parameters** | choice - The choice instance to configure.
|
+| **Returns** | |
### Methods
#### [id](#id)
| **Signature** | `cp.choices.builder:id(value) -> builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Indicates the choice is a favorite. |
-| **Parameters** | - * `value` - True or false.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Sets the ID of the choice. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [image](#image)
+| **Signature** | `cp.choices.builder:image(value) -> builder` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the image of the choice. |
+| **Parameters** | - value - A
hs.image image object that will be displayed next to the choice
|
+| **Returns** | |
#### [params](#params)
| **Signature** | `cp.choices.builder:params(value) -> builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Specifies a table of parameter values for the choice. These |
-| **Parameters** | - * `value` - The table of parameters.
|
-| **Returns** | - * The choice builder, added to the choices set.
|
+| **Type** | Method |
+| **Description** | Specifies a table of parameter values for the choice. These |
+| **Parameters** | value - The table of parameters.
|
+| **Returns** | - The choice builder, added to the choices set.
|
#### [subText](#subtext)
| **Signature** | `cp.choices.builder:subText(value) -> builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Specifies the `subText` value for the choice being built. |
-| **Parameters** | - * `value` - The subText title for the choice.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Specifies the `subText` value for the choice being built. |
+| **Parameters** | value - The subText title for the choice.
|
+| **Returns** | |
#### [text](#text)
| **Signature** | `cp.choices.builder:text(value) -> builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Specifies the text value for the choice being built. |
-| **Parameters** | - * `value` - The text title for the choice.
|
-| **Returns** | - * The choice builder, added to the choices set.
|
+| **Type** | Method |
+| **Description** | Specifies the text value for the choice being built. |
+| **Parameters** | value - The text title for the choice.
|
+| **Returns** | - The choice builder, added to the choices set.
|
diff --git a/api/cp/cp.choices.md b/api/cp/cp.choices.md
index 80bb715..ab9f9e2 100644
--- a/api/cp/cp.choices.md
+++ b/api/cp/cp.choices.md
@@ -20,26 +20,26 @@ Choices Module.
#### [new](#new)
| **Signature** | `cp.choices.new(type) -> choices` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new `cp.plugin.chooser.choices` instance for the specified type. |
-| **Parameters** | - * `type` - The unique ID for the type.
|
-| **Returns** | - * The new `choices` instance.
|
+| **Type** | Function |
+| **Description** | Creates a new `cp.choices` instance for the specified type. |
+| **Parameters** | type - The unique ID for the type.
|
+| **Returns** | - The new
choices instance.
|
### Methods
#### [getChoices](#getchoices)
| **Signature** | `cp.choices:getChoices() -> array of choices` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the array of choices that have been added to this instance. |
+| **Type** | Method |
+| **Description** | Returns the array of choices that have been added to this instance. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [new](#new)
| **Signature** | `cp.choices:new(choiceType) -> choices.builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds a new choice with the specified. Additional settings |
-| **Parameters** | - `text` - The text title for the choice.
|
-| **Returns** | - The choice builder, added to the choices set.
|
+| **Type** | Method |
+| **Description** | Adds a new choice with the specified. Additional settings |
+| **Parameters** | text - The text title for the choice.
|
+| **Returns** | - The choice builder, added to the choices set.
|
diff --git a/api/cp/cp.collect.List.md b/api/cp/cp.collect.List.md
new file mode 100644
index 0000000..080c280
--- /dev/null
+++ b/api/cp/cp.collect.List.md
@@ -0,0 +1,52 @@
+# [docs](index.md) » cp.collect.List
+---
+
+Lists are similar `tables` which can contain `nil` items without shortening the length.
+They also have a few additional methods to assist with managing the size.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [of](#of)
+ * [sized](#sized)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [size](#size)
+ * [trim](#trim)
+
+## API Documentation
+
+### Constructors
+
+#### [of](#of)
+| **Signature** | `cp.collect.List.of(...) -> cp.collect.List` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `List` with the specified items init. |
+| **Parameters** | - ... - The items to put in the list, in order.
|
+| **Returns** | |
+
+#### [sized](#sized)
+| **Signature** | `cp.collect.List.sized([size[, defaultValue]]) -> cp.collect.List` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `List` with the specified size. |
+| **Parameters** | - size - The size of the list. Defaults to
0. - defaultValue - If specified, all items in the list will be initialised to the default value.
|
+| **Returns** | |
+
+### Methods
+
+#### [size](#size)
+| **Signature** | `cp.collect.List:size([newSize]) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns and/or sets the current size of the list. |
+| **Parameters** | - newSize - if provided, sets the new size of the list. Any values contained above the new size are set to
nil.
|
+| **Returns** | |
+
+#### [trim](#trim)
+| **Signature** | `cp.collect.List:trim([minSize]) -> cp.collect.List` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Trims the current `List` to only contain trailing values that are not `nil`. |
+| **Parameters** | - minSize - If provided, the minimum size to trim down to. Defaults to
0.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.collect.Queue.md b/api/cp/cp.collect.Queue.md
new file mode 100644
index 0000000..b3077a9
--- /dev/null
+++ b/api/cp/cp.collect.Queue.md
@@ -0,0 +1,208 @@
+# [docs](index.md) » cp.collect.Queue
+---
+
+A "double-ended queue" implementation. This allows pushing and popping
+values to the left or right side of the queue. This can be used for
+classic 'stack' and 'queue' uses - for a stack, push and pop from one end,
+for a queue, push and pop from opposite ends.
+
+`#` will always return the size of the queue.
+
+The left-most item in the queue wil always be at index `1`, the right-most
+will be at index `#`.
+
+You can iterate via `ipairs`, but as with all tables, the queue contains any
+`nil` values, it will stop at that point. To iterate the whole queue, you
+need to use the `#` operator. Eg:
+
+```lua
+local q = Queue(1, nil, 3)
+for i,v in ipairs(q) do print(v) end -- Outputs "1"
+for i = 1, #q do print(v) end -- Outputs "1", "nil", "3"
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [contains](#contains)
+ * [len](#len)
+ * [peekLeft](#peekleft)
+ * [peekRight](#peekright)
+ * [popLeft](#popleft)
+ * [popRight](#popright)
+ * [pushLeft](#pushleft)
+ * [pushRight](#pushright)
+ * [removeItem](#removeitem)
+ * [removeItem](#removeitem)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [contains](#contains)
+ * [len](#len)
+ * [peekLeft](#peekleft)
+ * [peekRight](#peekright)
+ * [popLeft](#popleft)
+ * [popRight](#popright)
+ * [pushLeft](#pushleft)
+ * [pushRight](#pushright)
+
+## API Documentation
+
+### Functions
+
+#### [contains](#contains)
+| **Signature** | `cp.collect.Queue.contains(queue, item) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `queue` contains the specified `item`. |
+| **Parameters** | - queue - The queue to check.
- item - The item to check for.
|
+| **Returns** | true if the item is in the queue.
|
+
+#### [len](#len)
+| **Signature** | `cp.collect.Queue.len(queue) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the number of items in the queue. |
+| **Parameters** | - queue - The queue to check.
|
+| **Returns** | - The total number of items.
|
+
+#### [peekLeft](#peekleft)
+| **Signature** | `cp.collect.Queue.peekLeft(queue) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the left-most value from the `queue` without removig it. |
+| **Parameters** | - queue - The queue to peek into.
|
+| **Returns** | - The left-most value of the
Queue.
|
+
+#### [peekRight](#peekright)
+| **Signature** | `cp.collect.Queue.peekRight(queue) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the right-most value from the `queue` without removig it. |
+| **Parameters** | - queue - The queue to peek into.
|
+| **Returns** | - The right-most value of the
Queue.
|
+
+#### [popLeft](#popleft)
+| **Signature** | `cp.collect.Queue.popLeft(queue) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Removes the left-most value from the `queue` and returns it. |
+| **Parameters** | - queue - The queue to pop from.
|
+| **Returns** | - The left-most value of the
Queue.
|
+
+#### [popRight](#popright)
+| **Signature** | `cp.collect.Queue.popRight(queue) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Removes the right-most value from the `queue` and returns it. |
+| **Parameters** | - queue - The queue to pop from.
|
+| **Returns** | - The right-most value of the
Queue.
|
+
+#### [pushLeft](#pushleft)
+| **Signature** | `cp.collect.Queue.pushLeft(queue, ...) -> cp.collect.Queue` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Pushes the values to the left side of the `queue`. |
+| **Parameters** | - queue - The queue to push into.
- ... - The values to push.
|
+| **Returns** | |
+
+#### [pushRight](#pushright)
+| **Signature** | `cp.collect.Queue.pushRight(queue, ...) -> cp.collect.Queue` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Pushes the values to the right side of the `queue`. |
+| **Parameters** | - queue - The queue to push into.
- ... - The values to push.
|
+| **Returns** | |
+
+#### [removeItem](#removeitem)
+| **Signature** | `cp.collect.Queue:removeItem(item) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Attempts to remove the specified item from the queue. |
+| **Parameters** | - item - The item to remove, if present.
|
+| **Returns** | - The index of the item, or
nil if not found.
|
+
+#### [removeItem](#removeitem)
+| **Signature** | `cp.collect.Queue.removeItem(queue, item) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Attempts to remove the specified item from the queue. |
+| **Parameters** | - queue - The queue to modify.
- item - The item to remove, if present.
|
+| **Returns** | - The index of the item, or
nil if not found.
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.collect.Queue.new([...]) -> cp.collect.Queue` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Queue. |
+| **Parameters** | - ... - The optional list of values to add to the right of the queue.
|
+| **Returns** | |
+| **Notes** | - You can also create a new queue by calling
Queue(..) directly.
|
+
+### Methods
+
+#### [contains](#contains)
+| **Signature** | `cp.collect.Queue:contains(item) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the `queue` contains the specified `item`. |
+| **Parameters** | - item - The item to check for.
|
+| **Returns** | true if the item is in the queue.
|
+
+#### [len](#len)
+| **Signature** | `cp.collect.Queue:len(queue) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the number of items in the queue. |
+| **Parameters** | - queue - The queue to check.
|
+| **Returns** | - The total number of items.
|
+
+#### [peekLeft](#peekleft)
+| **Signature** | `cp.collect.Queue:peekLeft() -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the left-most value from the `queue` without removig it. |
+| **Parameters** | |
+| **Returns** | - The left-most value of the
Queue.
|
+
+#### [peekRight](#peekright)
+| **Signature** | `cp.collect.Queue:peekRight() -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the right-most value from the `queue` without removig it. |
+| **Parameters** | - queue - The queue to peek into.
|
+| **Returns** | - The right-most value of the
Queue.
|
+
+#### [popLeft](#popleft)
+| **Signature** | `cp.collect.Queue:popLeft() -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Removes the left-most value from the `queue` and returns it. |
+| **Parameters** | |
+| **Returns** | - The left-most value of the
Queue.
|
+
+#### [popRight](#popright)
+| **Signature** | `cp.collect.Queue:popRight() -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Removes the right-most value from the `queue` and returns it. |
+| **Parameters** | |
+| **Returns** | - The right-most value of the
Queue.
|
+
+#### [pushLeft](#pushleft)
+| **Signature** | `cp.collect.Queue:pushLeft(...) -> cp.collect.Queue` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes the values to the left side of the `queue`. |
+| **Parameters** | - ... - The values to push.
|
+| **Returns** | |
+
+#### [pushRight](#pushright)
+| **Signature** | `cp.collect.Queue:pushRight(...) -> cp.collect.Queue` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes the values to the right side of the `queue`. |
+| **Parameters** | - ... - The values to push.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.collect.Set.md b/api/cp/cp.collect.Set.md
new file mode 100644
index 0000000..249d1c2
--- /dev/null
+++ b/api/cp/cp.collect.Set.md
@@ -0,0 +1,265 @@
+# [docs](index.md) » cp.collect.Set
+---
+
+An implementation of a logical `set`, which contains a single unique
+reference of each item in it. For example:
+
+```lua
+Set(1,2,2,3) == Set(1,1,2,3,3) == Set(1,2,3)
+```
+
+You can combine sets in a couple of ways. For example, a `union`:
+
+```lua
+Set(1,2):union(Set(2,3)) == Set(1,2,3)
+Set(1,2) | Set(2,3) == Set(1,2,3)
+```
+
+...or an `intersection`:
+
+```lua
+Set(1,2):intersection(Set(2,3)) == Set(2)
+Set(1,2) & Set(2,3) == Set(2)
+```
+
+As indicated above, you can use operators for common set operations. Specifically:
+
+* [union](#union) (A ⋃ B): `a | b` or `a + b`
+* [intersection](#intersection) (A ∩ B): `a & b`
+* [complement](#complement) (Ac): `-a`
+* [difference](#diference) (A - B): `a - b`
+* [symetric difference](#symetricDifference) (A ⊕ B) `a ~ b`
+
+Keep in mind that Lua's operator precedence may be different to that of standard set operations, so it's probably best to group operations in brackets if you combine more than one in a single statement. For example:
+
+```lua
+a + b | c ~= a + (b | c)
+```
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [everything](#everything)
+ * [nothing](#nothing)
+* Functions - API calls offered directly by the extension
+ * [complement](#complement)
+ * [difference](#difference)
+ * [has](#has)
+ * [intersection](#intersection)
+ * [is](#is)
+ * [isComplement](#iscomplement)
+ * [size](#size)
+ * [symetricDifference](#symetricdifference)
+ * [union](#union)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [clone](#clone)
+ * [fromList](#fromlist)
+ * [fromMap](#frommap)
+ * [of](#of)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [complement](#complement)
+ * [difference](#difference)
+ * [has](#has)
+ * [intersection](#intersection)
+ * [isComplement](#iscomplement)
+ * [size](#size)
+ * [symetricDifference](#symetricdifference)
+ * [union](#union)
+
+## API Documentation
+
+### Constants
+
+#### [everything](#everything)
+| **Signature** | `cp.collect.Set.everything ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Set` which contains the whole universe. |
+
+#### [nothing](#nothing)
+| **Signature** | `cp.collect.Set.nothing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | An empty `Set`. |
+
+### Functions
+
+#### [complement](#complement)
+| **Signature** | `cp.collect.Set.complement(set) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a `Set` which is the complement of the provided set. |
+| **Parameters** | - set - The
Set to complement.
|
+| **Returns** | |
+
+#### [difference](#difference)
+| **Signature** | `cp.collect.Set.difference(left, right) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a new `Set` which is the set of values in `left` that are not in `right`. |
+| **Parameters** | - left - The left
Set. - right - The right
Set.
|
+| **Returns** | |
+
+#### [has](#has)
+| **Signature** | `cp.collect.Set.has(set, value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the set has the specified value. |
+| **Parameters** | - set - The
Set to check. - value - The value to check for.
|
+| **Returns** | true if the value is contained in the Set.
|
+
+#### [intersection](#intersection)
+| **Signature** | `cp.collect.Set.intersection(left, right) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | |
+| **Parameters** | - left - The left
Set - right - The right
Set.
|
+| **Returns** | - A new
Set which contains an intersection left and right.
|
+
+#### [is](#is)
+| **Signature** | `cp.collect.Set.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Set`. |
+| **Parameters** | - thing - The thing to check.
|
+| **Returns** | |
+
+#### [isComplement](#iscomplement)
+| **Signature** | `cp.collect.Set.isComplement(set) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the set is a complement set. |
+| **Parameters** | |
+| **Returns** | true if the set is a complement.
|
+
+#### [size](#size)
+| **Signature** | `cp.collect.Set.size(set) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the size of the set. |
+| **Parameters** | - set - The set to find the size of.
|
+| **Returns** | - the number of values in the set, or the number of values removed from a complement set.
|
+| **Notes** | - If the set is empty,
0 is returned. - If the set is a complement, this will return a negative number indicating how many values have been removed from the universal set of all things.
- If the set is a complement of an empty set,
nil is returned to indicate the size is infinite.
|
+
+#### [symetricDifference](#symetricdifference)
+| **Signature** | `cp.collect.Set.symetricDifference(left, right) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Performs a symetric difference of keys with a value of `true` in the left and right table into a new table. |
+| **Parameters** | - left - The left
Set. - right - The right
Set.
|
+| **Returns** | |
+
+#### [union](#union)
+| **Signature** | `cp.collect.Set.union(left, right) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a new `Set` which is a union of the `left` and `right` |
+| **Parameters** | - left - The left
Set. - right - The right
Set.
|
+| **Returns** | - A new
Set which contains a union of the left and right Sets.
|
+
+### Constructors
+
+#### [clone](#clone)
+| **Signature** | `cp.collect.Set.clone(set) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Set` which is a clone of the provided `Set`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [fromList](#fromlist)
+| **Signature** | `cp.collect.Set.fromList(list) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Set` instance, containing the unique items in the table collected as a list from `1` to `n`. |
+| **Parameters** | - list - The table that contains items as a list to add to the
Set. E.g. `{"foo", "bar"}
|
+| **Returns** | |
+
+#### [fromMap](#frommap)
+| **Signature** | `cp.collect.Set.fromMap(map) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Set` instance, containing the items in the provided `table` who's key value is `true`. |
+| **Parameters** | - map - The table that contains key/value items to add to the set. E.g.
{foo = true, bar = true}
|
+| **Returns** | |
+
+#### [of](#of)
+| **Signature** | `cp.collect.Set.of(...) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Set` instance, containing the items in the parameter list. |
+| **Parameters** | |
+| **Returns** | |
+
+### Methods
+
+#### [complement](#complement)
+| **Signature** | `cp.collect.Set:complement() -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Set` which is the complement of the current `Set`. |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | - You can also use the
- or ~ prefix operators. E.g. -a or ~a.
|
+
+#### [difference](#difference)
+| **Signature** | `cp.collect.Set:difference(right) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Set` which is the set of values in this `Set` that are not in `right`. |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | - You can also use the
- operator. E.g. a - b.
|
+
+#### [has](#has)
+| **Signature** | `cp.collect.Set:has(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if this set has the specified value. |
+| **Parameters** | - value - The value to check for.
|
+| **Returns** | true if the Set contains the value.
|
+| **Notes** | - You can also check for specific values via
mySet['key'] or mySet.key.
|
+
+#### [intersection](#intersection)
+| **Signature** | `cp.collect.Set:intersection(...) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new `Set` which is an intersection of the current values plus other `Set`s passed in. |
+| **Parameters** | - ... - The list of
Sets to create an intersection from.
|
+| **Returns** | |
+| **Notes** | - You can also use the
& operator. E.g. a & b.
|
+
+#### [isComplement](#iscomplement)
+| **Signature** | `cp.collect.Set:isComplement() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the set is a complement set. |
+| **Parameters** | |
+| **Returns** | true if the set is a complement.
|
+
+#### [size](#size)
+| **Signature** | `cp.collect.Set:size() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the size of the `Set`. If the set is a complement, this will return a negative number indicating |
+| **Parameters** | |
+| **Returns** | - the number of values in the set, or the number of values removed from a complement set.
|
+| **Notes** | - If the set is empty,
0 is returned. - If the set is a complement, this will return a negative number indicating how many values have been removed from the universal set of all things.
- If the set is a complement of an empty set,
nil is returned to indicate the size is infinite.
|
+
+#### [symetricDifference](#symetricdifference)
+| **Signature** | `cp.collect.Set:symetricDifference(right) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Performs a symetric difference of keys with a value of `true` in the left and right table into a new table. |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | - You can also use the
~ operator. E.g. a ~ b.
|
+
+#### [union](#union)
+| **Signature** | `cp.collect.Set:union(...) -> cp.collect.Set` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new set which is a union of the current set plus other `Set`s passed in. |
+| **Parameters** | - ... - The list of
Sets to create a union from.
|
+| **Returns** | - The new
Set which is a union.
|
+| **Notes** | - You can also use the
\| or + operator. E.g. a \| b or a + b.
|
+
diff --git a/api/cp/cp.commands.command.md b/api/cp/cp.commands.command.md
index 94db8a9..392ad1f 100644
--- a/api/cp/cp.commands.command.md
+++ b/api/cp/cp.commands.command.md
@@ -8,19 +8,24 @@ Commands Module.
* [isActive](#isactive)
* [isEnabled](#isenabled)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [action](#action)
* [activated](#activated)
* [activatedBy](#activatedby)
* [addShortcut](#addshortcut)
* [deleteShortcuts](#deleteshortcuts)
* [disable](#disable)
* [enable](#enable)
+ * [getAction](#getaction)
* [getFirstShortcut](#getfirstshortcut)
* [getGroup](#getgroup)
+ * [getImage](#getimage)
* [getShortcuts](#getshortcuts)
* [getSubtitle](#getsubtitle)
* [getTitle](#gettitle)
* [groupedBy](#groupedby)
+ * [hasAction](#hasaction)
* [id](#id)
+ * [image](#image)
* [new](#new)
* [parent](#parent)
* [pressed](#pressed)
@@ -41,211 +46,253 @@ Commands Module.
#### [isActive](#isactive)
| **Signature** | `cp.commands.command.isActive ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Indicates if the command is active. To be active, both the command and the group it belongs to must be enabled. |
+| **Type** | Field |
+| **Description** | Indicates if the command is active. To be active, both the command and the group it belongs to must be enabled. |
#### [isEnabled](#isenabled)
| **Signature** | `cp.commands.command.isEnabled ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | If set to `true`, the command is enabled. |
+| **Type** | Field |
+| **Description** | If set to `true`, the command is enabled. |
### Methods
+#### [action](#action)
+| **Signature** | `cp.commands.command:action(getFn, setFn) -> command` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the action get and set callbacks for a specific command. |
+| **Parameters** | - getFn - The function that gets the action.
- setFn - The function that sets the action.
|
+| **Returns** | - command - The command that was created.
|
+| **Notes** | - The
getFn function should have no arguments. - The
setFn function can have two optional arguments: clear - A boolean that defines whether or not the value should be cleared.completionFn - An optional completion function callback.
|
+
#### [activated](#activated)
| **Signature** | `cp.commands.command:activated(repeats) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Executes the 'pressed', then 'repeated', then 'released' functions, if present. |
-| **Parameters** | - `repeats` - the number of times to repeat the 'repeated' function. Defaults to 1.
|
-| **Returns** | - the last 'truthy' result (non-nil/false).
|
+| **Type** | Method |
+| **Description** | Executes the 'pressed', then 'repeated', then 'released' functions, if present. |
+| **Parameters** | repeats - the number of times to repeat the 'repeated' function. Defaults to 1.
|
+| **Returns** | - the last 'truthy' result (non-nil/false).
|
#### [activatedBy](#activatedby)
| **Signature** | `cp.commands.command:activatedBy([modifiers,] [keyCode]) -> command/modifier` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Specifies that the command is activated by pressing a key combination. |
-| **Parameters** | - `modifiers` - (optional) The table containing names of required modifiers.
- `keyCode` - (optional) The key code that will activate the command, with no modifiers.
|
-| **Returns** | - `command` if a `keyCode` was provided, or `modifier` if not.
|
+| **Type** | Method |
+| **Description** | Specifies that the command is activated by pressing a key combination. |
+| **Parameters** | modifiers - (optional) The table containing names of required modifiers.keyCode - (optional) The key code that will activate the command, with no modifiers.
|
+| **Returns** | command if a keyCode was provided, or modifier if not.
|
#### [addShortcut](#addshortcut)
| **Signature** | `cp.commands.command:addShortcut(newShortcut) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds the specified shortcut to the command. |
-| **Parameters** | - `newShortcut` - the shortcut to add.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Adds the specified shortcut to the command. |
+| **Parameters** | newShortcut - the shortcut to add.
|
+| **Returns** | |
#### [deleteShortcuts](#deleteshortcuts)
| **Signature** | `cp.commands.command:deleteShortcuts() -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the function that will be called when the command key combo is pressed. |
+| **Type** | Method |
+| **Description** | Sets the function that will be called when the command key combo is pressed. |
| **Parameters** | |
-| **Returns** | - command - The current command
|
+| **Returns** | - command - The current command
|
#### [disable](#disable)
| **Signature** | `cp.commands.command:disable() -> cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Disables the command. |
-| **Parameters** | |
-| **Returns** | - * The `cp.commands.command` instance.
|
+| **Type** | Method |
+| **Description** | Disables the command. |
+| **Parameters** | |
+| **Returns** | - The
cp.commands.command instance.
|
#### [enable](#enable)
| **Signature** | `cp.commands.command:enable() -> cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Enables the command. |
-| **Parameters** | |
-| **Returns** | - * The `cp.commands.command` instance.
|
+| **Type** | Method |
+| **Description** | Enables the command. |
+| **Parameters** | |
+| **Returns** | - The
cp.commands.command instance.
|
+
+#### [getAction](#getaction)
+| **Signature** | `cp.commands.command:getAction() -> function, function` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the action get and set callbacks for a specific command. |
+| **Parameters** | |
+| **Returns** | - getFn - The function that gets the action.
- setFn - The function that sets the action.
|
#### [getFirstShortcut](#getfirstshortcut)
| **Signature** | `cp.commands.command:getFirstShortcut() -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the first shortcut, or `nil` if none have been registered. |
+| **Type** | Method |
+| **Description** | Returns the first shortcut, or `nil` if none have been registered. |
| **Parameters** | |
-| **Returns** | - The first shortcut, or `nil`.
|
+| **Returns** | - The first shortcut, or
nil.
|
#### [getGroup](#getgroup)
| **Signature** | `cp.commands.command:getGroup() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the group ID for the command. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Returns the group ID for the command. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getImage](#getimage)
+| **Signature** | `cp.commands.command:getImage() -> hs.image object` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the current image. |
+| **Parameters** | |
+| **Returns** | - A hs.image object or
nil if not is specified.
|
#### [getShortcuts](#getshortcuts)
| **Signature** | `cp.commands.command:getShortcuts() -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the set of shortcuts assigned to this command. |
+| **Type** | Method |
+| **Description** | Returns the set of shortcuts assigned to this command. |
| **Parameters** | |
-| **Returns** | - The associated shortcuts.
|
+| **Returns** | - The associated shortcuts.
|
#### [getSubtitle](#getsubtitle)
| **Signature** | `cp.commands.command:getSubtitle() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the current subtitle, based on either the set subtitle, or the "_subtitle" value in the I18N files. |
-| **Parameters** | |
-| **Returns** | - * The subtitle value or `nil`.
|
+| **Type** | Method |
+| **Description** | Returns the current subtitle, based on either the set subtitle, or the "_subtitle" value in the I18N files. |
+| **Parameters** | |
+| **Returns** | - The subtitle value or
nil.
|
#### [getTitle](#gettitle)
| **Signature** | `cp.commands.command:getTitle() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the command title in the current language, if availalbe. If not, the ID is returned. |
-| **Parameters** | |
+| **Type** | Method |
+| **Description** | Returns the command title in the current language, if availalbe. If not, the ID is returned. |
+| **Parameters** | |
#### [groupedBy](#groupedby)
| **Signature** | `cp.commands.command:groupedBy(group) -> cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Specifies that the command is grouped by a specific value. |
-| **Parameters** | - * `group` - The group ID.
|
-| **Returns** | - * The `cp.commands.command` instance.
|
+| **Type** | Method |
+| **Description** | Specifies that the command is grouped by a specific value. |
+| **Parameters** | |
+| **Returns** | - The
cp.commands.command instance.
|
+
+#### [hasAction](#hasaction)
+| **Signature** | `cp.commands.command:hasAction() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets whether or not any action callbacks have been assigned. |
+| **Parameters** | |
+| **Returns** | true if action callbacks have been assigned, otherwise false.
|
#### [id](#id)
| **Signature** | `cp.commands.command:id() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ID for this command. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Returns the ID for this command. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [image](#image)
+| **Signature** | `cp.commands.command:image(img) -> cp.commands.command` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the specified image and returns the `cp.commands.command` instance. |
+| **Parameters** | img - The hs.image to use.
|
+| **Returns** | - The
cp.commands.command instance.
|
#### [new](#new)
| **Signature** | `cp.commands.command.new() -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new command, which can have keyboard shortcuts assigned to it. |
-| **Parameters** | - `id` - the unique identifier for the command. E.g. 'cpCustomCommand'
- `parent` - The parent group.
|
-| **Returns** | - command - The command that was created.
|
+| **Type** | Method |
+| **Description** | Creates a new command, which can have keyboard shortcuts assigned to it. |
+| **Parameters** | id - the unique identifier for the command. E.g. 'cpCustomCommand'parent - The parent group.
|
+| **Returns** | - command - The command that was created.
|
#### [parent](#parent)
| **Signature** | `cp.commands.command:parent() -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the parent command group. |
-| **Parameters** | |
+| **Type** | Method |
+| **Description** | Returns the parent command group. |
+| **Parameters** | |
#### [pressed](#pressed)
| **Signature** | `cp.commands.command:pressed() -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Executes the 'pressed' function, if present. |
+| **Type** | Method |
+| **Description** | Executes the 'pressed' function, if present. |
| **Parameters** | |
-| **Returns** | - the result of the function, or `nil` if none is present.
|
+| **Returns** | - the result of the function, or
nil if none is present.
|
#### [released](#released)
| **Signature** | `cp.commands.command:released() -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Executes the 'released' function, if present. |
+| **Type** | Method |
+| **Description** | Executes the 'released' function, if present. |
| **Parameters** | |
-| **Returns** | - the result of the function, or `nil` if none is present.
|
+| **Returns** | - the result of the function, or
nil if none is present.
|
#### [repeated](#repeated)
| **Signature** | `cp.commands.command:repeated(repeats) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Executes the 'repeated' function, if present. |
-| **Parameters** | - `repeats` - the number of times to repeat. Defaults to 1.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Executes the 'repeated' function, if present. |
+| **Parameters** | repeats - the number of times to repeat. Defaults to 1.
|
+| **Returns** | |
#### [setShortcuts](#setshortcuts)
| **Signature** | `cp.commands.command:setShortcuts(shortcuts) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Deletes any existing shortcuts and applies the new set of shortcuts in the table. |
-| **Parameters** | - * shortcuts - The set of `cp.commands.shortcuts` to apply to this command.
|
-| **Returns** | - * The `cp.commands.command` instance.
|
+| **Type** | Method |
+| **Description** | Deletes any existing shortcuts and applies the new set of shortcuts in the table. |
+| **Parameters** | - shortcuts - The set of
cp.commands.shortcuts to apply to this command.
|
+| **Returns** | - The
cp.commands.command instance.
|
#### [subtitled](#subtitled)
| **Signature** | `cp.commands.command:subtitled(subtitle) -> cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the specified subtitle and returns the `cp.commands.command` instance. |
-| **Parameters** | - * `subtitle` - The new subtitle.
|
+| **Type** | Method |
+| **Description** | Sets the specified subtitle and returns the `cp.commands.command` instance. |
+| **Parameters** | subtitle - The new subtitle.
|
+| **Returns** | - The
cp.commands.command instance.
|
#### [titled](#titled)
| **Signature** | `cp.commands.command:titled(title) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Applies the provided human-readable title to the command. |
-| **Parameters** | - `id` = the unique identifier for the command. E.g. 'FCPXHacksCustomCommand'
|
-| **Returns** | - command - The command that was created.
|
+| **Type** | Method |
+| **Description** | Applies the provided human-readable title to the command. |
+| **Parameters** | - id - the unique identifier for the command (i.e. 'CPCustomCommand').
|
+| **Returns** | - command - The command that was created.
|
#### [whenActivated](#whenactivated)
| **Signature** | `cp.commands.command:whenActivated(activatedFn) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the function that will be called when the command is activated. |
-| **Parameters** | - `activatedFn` - the function to call when activated.
|
-| **Returns** | - command - The current command
|
+| **Type** | Method |
+| **Description** | Sets the function that will be called when the command is activated. |
+| **Parameters** | activatedFn - the function to call when activated.
|
+| **Returns** | - command - The current command
|
#### [whenPressed](#whenpressed)
| **Signature** | `cp.commands.command:whenPressed(pressedFn) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the function that will be called when the command key combo is pressed. |
-| **Parameters** | - `pressedFn` - the function to call when pressed.
|
-| **Returns** | - command - The current command
|
+| **Type** | Method |
+| **Description** | Sets the function that will be called when the command key combo is pressed. |
+| **Parameters** | pressedFn - the function to call when pressed.
|
+| **Returns** | - command - The current command
|
#### [whenReleased](#whenreleased)
| **Signature** | `cp.commands.command:whenReleased(releasedFn) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the function that will be called when the command key combo is released. |
-| **Parameters** | - `releasedFn` - the function to call when released.
|
-| **Returns** | - command - The current command
|
+| **Type** | Method |
+| **Description** | Sets the function that will be called when the command key combo is released. |
+| **Parameters** | releasedFn - the function to call when released.
|
+| **Returns** | - command - The current command
|
#### [whenRepeated](#whenrepeated)
| **Signature** | `cp.commands.command:whenRepeated(repeatedFn) -> command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the function that will be called when the command key combo is repeated. |
-| **Parameters** | - `repeatedFn` - the function to call when repeated.
|
-| **Returns** | - command - The current command
|
+| **Type** | Method |
+| **Description** | Sets the function that will be called when the command key combo is repeated. |
+| **Parameters** | repeatedFn - the function to call when repeated.
|
+| **Returns** | - command - The current command
|
diff --git a/api/cp/cp.commands.md b/api/cp/cp.commands.md
index 8ec55f8..b39651b 100644
--- a/api/cp/cp.commands.md
+++ b/api/cp/cp.commands.md
@@ -9,6 +9,8 @@ Commands Module.
* [cp.commands.shortcut](cp.commands.shortcut.md)
## API Overview
+* Constants - Useful values which cannot be changed
+ * [DEFAULT_EXTENSION](#default_extension)
* Functions - API calls offered directly by the extension
* [getShortcutsPath](#getshortcutspath)
* [group](#group)
@@ -36,170 +38,178 @@ Commands Module.
## API Documentation
+### Constants
+
+#### [DEFAULT_EXTENSION](#default_extension)
+| **Signature** | `cp.commands.DEFAULT_EXTENSION -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The menubar position priority. |
+
### Functions
#### [getShortcutsPath](#getshortcutspath)
| **Signature** | `cp.commands.getShortcutsPath(name) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the path to the named shortcut set. |
+| **Type** | Function |
+| **Description** | Returns the path to the named shortcut set. |
#### [group](#group)
| **Signature** | `cp.commands.group(id) -> cp.command or nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a collection of commands. These commands can be enabled or disabled as a group. |
-| **Parameters** | - * `id` - The ID to retrieve
|
-| **Returns** | - `cp.commands` - The command group with the specified ID, or `nil` if none exists.
|
+| **Type** | Function |
+| **Description** | Creates a collection of commands. These commands can be enabled or disabled as a group. |
+| **Parameters** | |
+| **Returns** | cp.commands - The command group with the specified ID, or nil if none exists.
|
#### [groupIds](#groupids)
| **Signature** | `cp.commands.groupIds() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns an array of IDs of command groups which have been created. |
-| **Parameters** | |
-| **Returns** | - `table` - The array of group IDs.
|
+| **Type** | Function |
+| **Description** | Returns an array of IDs of command groups which have been created. |
+| **Parameters** | |
+| **Returns** | table - The array of group IDs.
|
#### [groups](#groups)
| **Signature** | `cp.commands.groups() -> table of cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a table with the set of commands. |
-| **Parameters** | - * `id` - The ID to retrieve
|
-| **Returns** | - `cp.commands` - The command group with the specified ID, or `nil` if none exists.
|
+| **Type** | Function |
+| **Description** | Returns a table with the set of commands. |
+| **Parameters** | |
+| **Returns** | cp.commands - The command group with the specified ID, or nil if none exists.
|
#### [loadFromFile](#loadfromfile)
| **Signature** | `cp.commands.loadFromFile(name) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Loads a shortcut set from the standard location with the specified name. |
-| **Parameters** | - * name - The name of the shortcut set. E.g. "My Custom Shortcuts"
|
-| **Returns** | - * `true` if the file was found and loaded successfully.
|
+| **Type** | Function |
+| **Description** | Loads a shortcut set from the standard location with the specified name. |
+| **Parameters** | - name - The name of the shortcut set. E.g. "My Custom Shortcuts"
|
+| **Returns** | true if the file was found and loaded successfully.
|
#### [new](#new)
| **Signature** | `cp.commands.new(id) -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a collection of commands. These commands can be enabled or disabled as a group. |
-| **Parameters** | - `id` - The unique ID for this command group.
|
-| **Returns** | - cp.commands - The command group that was created.
|
+| **Type** | Function |
+| **Description** | Creates a collection of commands. These commands can be enabled or disabled as a group. |
+| **Parameters** | id - The unique ID for this command group.
|
+| **Returns** | - cp.commands - The command group that was created.
|
#### [saveToFile](#savetofile)
| **Signature** | `cp.commands.saveToFile(name) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Saves the current shortcuts for all groups to a file in the standard location with the provided name. |
-| **Parameters** | - * name - The name of the command set. E.g. "My Custom Commands"
|
-| **Returns** | - * `true` if the shortcuts were saved successfully.
|
+| **Type** | Function |
+| **Description** | Saves the current shortcuts for all groups to a file in the standard location with the provided name. |
+| **Parameters** | - name - The name of the command set. E.g. "My Custom Commands"
|
+| **Returns** | true if the shortcuts were saved successfully.
|
### Fields
#### [enabled](#enabled)
| **Signature** | `cp.commands.enabled ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | If enabled, the commands in the group will be active as well. |
+| **Type** | Field |
+| **Description** | If enabled, the commands in the group will be active as well. |
#### [isEditable](#iseditable)
| **Signature** | `cp.commands.isEditable ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | If set to `false`, the command group is not user-editable. |
+| **Type** | Field |
+| **Description** | If set to `false`, the command group is not user-editable. |
### Methods
#### [activate](#activate)
| **Signature** | `cp.commands:activate(successFn, failureFn) -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Will trigger an 'activate' event, and then execute either the `successFn` or `failureFn` if the |
-| **Parameters** | - * successFn - the function to call if successfully activated.
- * failureFn - the function to call if not activated after 5 seconds.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Will trigger an 'activate' event, and then execute either the `successFn` or `failureFn` if the |
+| **Parameters** | - successFn - the function to call if successfully activated.
- failureFn - the function to call if not activated after 5 seconds.
|
+| **Returns** | |
#### [add](#add)
| **Signature** | `cp.commands:add(commandId) -> cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds a new command with the specified ID to this group. Additional configuration |
-| **Parameters** | - * `commandId` - The unique ID for the new command.
|
-| **Returns** | - * The new `cp.commands.command` instance.
|
+| **Type** | Method |
+| **Description** | Adds a new command with the specified ID to this group. Additional configuration |
+| **Parameters** | commandId - The unique ID for the new command.
|
+| **Returns** | - The new
cp.commands.command instance.
|
#### [clear](#clear)
| **Signature** | `cp.commands:clear() -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Clears all commands and their shortcuts. |
-| **Parameters** | |
-| **Returns** | - * The command group instance.
|
+| **Type** | Method |
+| **Description** | Clears all commands and their shortcuts. |
+| **Parameters** | |
+| **Returns** | - The command group instance.
|
#### [deleteShortcuts](#deleteshortcuts)
| **Signature** | `cp.commands:deleteShortcuts() -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Clears all shortcuts associated with commands in this command group. |
-| **Parameters** | |
-| **Returns** | - * The command group instance.
|
+| **Type** | Method |
+| **Description** | Clears all shortcuts associated with commands in this command group. |
+| **Parameters** | |
+| **Returns** | - The command group instance.
|
#### [disable](#disable)
| **Signature** | `cp.commands:disable() -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Disables the command group. |
-| **Parameters** | |
-| **Returns** | - * The command group instance.
|
+| **Type** | Method |
+| **Description** | Disables the command group. |
+| **Parameters** | |
+| **Returns** | - The command group instance.
|
#### [enable](#enable)
| **Signature** | `cp.commands:enable() -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Enables the command group. |
-| **Parameters** | |
-| **Returns** | - * The command group instance.
|
+| **Type** | Method |
+| **Description** | Enables the command group. |
+| **Parameters** | |
+| **Returns** | - The command group instance.
|
#### [get](#get)
| **Signature** | `cp.commands:get(commandId) -> cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the command with the specified ID, or `nil` if none exists. |
-| **Parameters** | - * `commandId` - The command ID to retrieve.
|
-| **Returns** | - * The `cp.commands.command`, or `nil`.
|
+| **Type** | Method |
+| **Description** | Returns the command with the specified ID, or `nil` if none exists. |
+| **Parameters** | commandId - The command ID to retrieve.
|
+| **Returns** | - The
cp.commands.command, or nil.
|
#### [getAll](#getall)
| **Signature** | `cp.commands:getAll() -> table of cp.commands.command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the table of commands, with the key being the ID and the value being the command instance. Eg: |
+| **Type** | Method |
+| **Description** | Returns the table of commands, with the key being the ID and the value being the command instance. Eg: |
#### [id](#id)
| **Signature** | `cp.commands:id() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the unique ID of the command group. |
-| **Parameters** | |
-| **Returns** | - * The command group ID string.
|
+| **Type** | Method |
+| **Description** | Returns the unique ID of the command group. |
+| **Parameters** | |
+| **Returns** | - The command group ID string.
|
#### [loadShortcuts](#loadshortcuts)
| **Signature** | `cp.commands:loadShortcuts(data) -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Loads the shortcut details in the data table and applies them to the commands in this group. |
-| **Parameters** | - * data - The data table containing shortcuts.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Loads the shortcut details in the data table and applies them to the commands in this group. |
+| **Parameters** | - data - The data table containing shortcuts.
|
+| **Returns** | |
#### [saveShortcuts](#saveshortcuts)
| **Signature** | `cp.commands:saveShortcuts() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table that is approprate to be saved to file that contains the shortuct |
-| **Parameters** | |
-| **Returns** | - * The table of shortcuts for commands.
|
+| **Type** | Method |
+| **Description** | Returns a table that is approprate to be saved to file that contains the shortuct |
+| **Parameters** | |
+| **Returns** | - The table of shortcuts for commands.
|
#### [watch](#watch)
| **Signature** | `cp.commands:watch(events) -> cp.commands` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds an event watcher to the command group. |
-| **Parameters** | - * events - The table of events to watch for (see Notes).
|
-| **Returns** | - * The command group instance.
|
-| **Notes** | - * The table can have properties with the following functions, which will be called for the specific event:
- ** `add(command)`: Called after the provided `cp.commands.command` instance has been added.
- ** `activate()` Called when the command group is activated.
- ** `enable()`: Called when the command group is enabled.
- ** `disable()`: Called when the command group is disabled.
|
+| **Type** | Method |
+| **Description** | Adds an event watcher to the command group. |
+| **Parameters** | - events - The table of events to watch for (see Notes).
|
+| **Returns** | - The command group instance.
|
+| **Notes** | - The table can have properties with the following functions, which will be called for the specific event:
add(command): Called after the provided cp.commands.command instance has been added. activate() Called when the command group is activated. enable(): Called when the command group is enabled. disable(): Called when the command group is disabled.
|
diff --git a/api/cp/cp.commands.shortcut.builder.md b/api/cp/cp.commands.shortcut.builder.md
index 33a32f3..cf562c9 100644
--- a/api/cp/cp.commands.shortcut.builder.md
+++ b/api/cp/cp.commands.shortcut.builder.md
@@ -15,16 +15,16 @@ Shortcut Commands Builder Module.
#### [add](#add)
| **Signature** | `cp.commands.shortcut.builder:add(modifier, [keyCode]) -> shortcut/command` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds the specified modifier to the set. If a `keyCode` is provided, |
-| **Parameters** | - modifier - (optional) The modifier that was added.
- keyCode - (optional) The key code being modified.
|
-| **Returns** | - `self` if no `keyCode` is provided, or the original `command`.
|
+| **Type** | Method |
+| **Description** | Adds the specified modifier to the set. If a `keyCode` is provided, |
+| **Parameters** | - modifier - (optional) The modifier that was added.
- keyCode - (optional) The key code being modified.
|
+| **Returns** | self if no keyCode is provided, or the original command.
|
#### [new](#new)
| **Signature** | `cp.commands.shortcut.builder.new([receiverFn]) -> builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new shortcut builder. If provided, the receiver function |
-| **Parameters** | - `receiverFn` - The function which will be called with the new shortcut, when built.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Creates a new shortcut builder. If provided, the receiver function |
+| **Parameters** | receiverFn - The function which will be called with the new shortcut, when built.
|
+| **Returns** | |
diff --git a/api/cp/cp.commands.shortcut.md b/api/cp/cp.commands.shortcut.md
index ed88c96..5e67803 100644
--- a/api/cp/cp.commands.shortcut.md
+++ b/api/cp/cp.commands.shortcut.md
@@ -29,92 +29,92 @@ Shortcut Commands
#### [build](#build)
| **Signature** | `cp.commands.shortcut.build(receiverFn) -> cp.commands.shortcut.builder` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new shortcut builder. |
-| **Parameters** | - `receiverFn` - (optional) a function which will get passed the shortcut when the build is complete.
|
-| **Returns** | - `shortcut.builder` which can be used to create the shortcut.
|
-| **Notes** | - * If provided, the receiver function will be called when the shortcut has been configured, and passed the new
- shortcut. The result of that function will be returned to the next stage.
- If no `receiverFn` is provided, the shortcut will be returned directly.
|
+| **Type** | Function |
+| **Description** | Creates a new shortcut builder. |
+| **Parameters** | receiverFn - (optional) a function which will get passed the shortcut when the build is complete.
|
+| **Returns** | shortcut.builder which can be used to create the shortcut.
|
+| **Notes** | - If provided, the receiver function will be called when the shortcut has been configured, and passed the new shortcut. The result of that function will be returned to the next stage. If no
receiverFn is provided, the shortcut will be returned directly.
|
#### [new](#new)
| **Signature** | `cp.commands.shortcut.new(modifiers, keyCode) -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new keyboard shortcut, attached to the specified `hs.commands.command` |
-| **Parameters** | - `modifiers` - The modifiers.
- `keyCode` - The key code.
|
-| **Returns** | - shortcut - The shortcut that was created.
|
+| **Type** | Function |
+| **Description** | Creates a new keyboard shortcut, attached to the specified `hs.commands.command` |
+| **Parameters** | modifiers - The modifiers.keyCode - The key code.
|
+| **Returns** | - shortcut - The shortcut that was created.
|
### Fields
#### [isEnabled](#isenabled)
| **Signature** | `cp.commands.shortcut:isEnabled ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | If `true`, the shortcut is enabled. |
+| **Type** | Field |
+| **Description** | If `true`, the shortcut is enabled. |
### Methods
#### [bind](#bind)
| **Signature** | `cp.commands.shortcut:bind(pressedFn, releasedFn, repeatedFn) -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This function binds the shortcut to a hotkey, with the specified callback functions for `pressedFn`, `releasedFn` and `repeatedFn`. |
-| **Parameters** | - `pressedFn` - (optional) If present, this is called when the shortcut combo is pressed.
- `releasedFn` - (optional) If present, this is called when the shortcut combo is released.
- `repeatedFn` - (optional) If present, this is called when the shortcut combo is repeated.
|
-| **Returns** | |
-| **Notes** | - If the shortcut is enabled, the hotkey will also be enabled at this point.
|
+| **Type** | Method |
+| **Description** | This function binds the shortcut to a hotkey, with the specified callback functions for `pressedFn`, `releasedFn` and `repeatedFn`. |
+| **Parameters** | pressedFn - (optional) If present, this is called when the shortcut combo is pressed.releasedFn - (optional) If present, this is called when the shortcut combo is released.repeatedFn - (optional) If present, this is called when the shortcut combo is repeated.
|
+| **Returns** | |
+| **Notes** | - If the shortcut is enabled, the hotkey will also be enabled at this point.
|
#### [delete](#delete)
| **Signature** | `cp.commands.shortcut:delete() -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Deletes a shortcut. |
+| **Type** | Method |
+| **Description** | Deletes a shortcut. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [disable](#disable)
| **Signature** | `cp.commands.shortcut:disable() -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This disables the shortcut. If a hotkey has been bound, it will be disabled also. |
+| **Type** | Method |
+| **Description** | This disables the shortcut. If a hotkey has been bound, it will be disabled also. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [enable](#enable)
| **Signature** | `cp.commands.shortcut:enable() -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This enables the shortcut. If a hotkey has been bound, it will be enabled also. |
+| **Type** | Method |
+| **Description** | This enables the shortcut. If a hotkey has been bound, it will be enabled also. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getKeyCode](#getkeycode)
| **Signature** | `cp.commands.shortcut:getKeyCode() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a string containing the keycode of the shortcut. |
+| **Type** | Method |
+| **Description** | Returns a string containing the keycode of the shortcut. |
| **Parameters** | |
-| **Returns** | - `string` containing the keycode of the shortcut.
|
+| **Returns** | string containing the keycode of the shortcut.
|
#### [getModifiers](#getmodifiers)
| **Signature** | `cp.commands.shortcut:getModifiers() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table containing the modifiers for a shortcut. |
+| **Type** | Method |
+| **Description** | Returns a table containing the modifiers for a shortcut. |
| **Parameters** | |
-| **Returns** | - `table` containing the modifiers of the shortcut.
|
+| **Returns** | table containing the modifiers of the shortcut.
|
#### [trigger](#trigger)
| **Signature** | `cp.commands.shortcut:trigger() -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This will trigger the keystroke specified in the shortcut. |
+| **Type** | Method |
+| **Description** | This will trigger the keystroke specified in the shortcut. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [unbind](#unbind)
| **Signature** | `cp.commands.shortcut:unbind() -> shortcut` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Unbinds a shortcut. |
+| **Type** | Method |
+| **Description** | Unbinds a shortcut. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
diff --git a/api/cp/cp.config.dockIconClickCallback.md b/api/cp/cp.config.dockIconClickCallback.md
index f05392e..8f57746 100644
--- a/api/cp/cp.config.dockIconClickCallback.md
+++ b/api/cp/cp.config.dockIconClickCallback.md
@@ -18,40 +18,40 @@ Callback which triggers when the CommandPost Dock Icon is clicked
#### [callbackFn](#callbackfn)
| **Signature** | `cp.config.dockIconClickCallback:callbackFn() -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the callbackFn of the current Dock Icon Click Callback |
-| **Parameters** | |
-| **Returns** | - The callbackFn of the current Shutdown Callback
|
+| **Type** | Method |
+| **Description** | Returns the callbackFn of the current Dock Icon Click Callback |
+| **Parameters** | |
+| **Returns** | - The callbackFn of the current Shutdown Callback
|
#### [get](#get)
| **Signature** | `cp.config.dockIconClickCallback:get(id) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new Dock Icon Click Callback. |
-| **Parameters** | - * `id` - The unique ID for the callback you want to return.
|
-| **Returns** | - table containing the callback
|
+| **Type** | Method |
+| **Description** | Creates a new Dock Icon Click Callback. |
+| **Parameters** | id - The unique ID for the callback you want to return.
|
+| **Returns** | - table containing the callback
|
#### [getAll](#getall)
| **Signature** | `cp.config.dockIconClickCallback:getAll() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns all of the created Dock Icon Click Callbacks |
-| **Parameters** | |
-| **Returns** | - table containing all of the created callbacks
|
+| **Type** | Method |
+| **Description** | Returns all of the created Dock Icon Click Callbacks |
+| **Parameters** | |
+| **Returns** | - table containing all of the created callbacks
|
#### [id](#id)
| **Signature** | `cp.config.dockIconClickCallback:id() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ID of the current Dock Icon Click Callback |
-| **Parameters** | |
-| **Returns** | - The ID of the current File Dropped to Dock Icon Callback as a `string`
|
+| **Type** | Method |
+| **Description** | Returns the ID of the current Dock Icon Click Callback |
+| **Parameters** | |
+| **Returns** | - The ID of the current File Dropped to Dock Icon Callback as a
string
|
#### [new](#new)
| **Signature** | `cp.config.dockIconClickCallback:new(id, callbackFn) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new File Dropped to Dock Icon Callback. |
-| **Parameters** | - * `id` - The unique ID for this callback.
|
-| **Returns** | - table that has been created
|
+| **Type** | Method |
+| **Description** | Creates a new File Dropped to Dock Icon Callback. |
+| **Parameters** | id - The unique ID for this callback.
|
+| **Returns** | - table that has been created
|
diff --git a/api/cp/cp.config.fileDroppedToDockIconCallback.md b/api/cp/cp.config.fileDroppedToDockIconCallback.md
index f5b45ea..6d412ba 100644
--- a/api/cp/cp.config.fileDroppedToDockIconCallback.md
+++ b/api/cp/cp.config.fileDroppedToDockIconCallback.md
@@ -18,40 +18,40 @@ File Dropped to Dock Icon Callback
#### [callbackFn](#callbackfn)
| **Signature** | `cp.config.fileDroppedToDockIconCallback:callbackFn() -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the callbackFn of the current File Dropped to Dock Icon Callback |
-| **Parameters** | |
-| **Returns** | - The callbackFn of the current Shutdown Callback
|
+| **Type** | Method |
+| **Description** | Returns the callbackFn of the current File Dropped to Dock Icon Callback |
+| **Parameters** | |
+| **Returns** | - The callbackFn of the current Shutdown Callback
|
#### [get](#get)
| **Signature** | `cp.config.fileDroppedToDockIconCallback:get(id) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new File Dropped to Dock Icon Callback. |
-| **Parameters** | - * `id` - The unique ID for the callback you want to return.
|
-| **Returns** | - table containing the callback
|
+| **Type** | Method |
+| **Description** | Creates a new File Dropped to Dock Icon Callback. |
+| **Parameters** | id - The unique ID for the callback you want to return.
|
+| **Returns** | - table containing the callback
|
#### [getAll](#getall)
| **Signature** | `cp.config.fileDroppedToDockIconCallback:getAll() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns all of the created File Dropped to Dock Icon Callbacks |
-| **Parameters** | |
-| **Returns** | - table containing all of the created callbacks
|
+| **Type** | Method |
+| **Description** | Returns all of the created File Dropped to Dock Icon Callbacks |
+| **Parameters** | |
+| **Returns** | - table containing all of the created callbacks
|
#### [id](#id)
| **Signature** | `cp.config.fileDroppedToDockIconCallback:id() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ID of the current Text Dropped to Dock Icon Callback |
-| **Parameters** | |
-| **Returns** | - The ID of the current File Dropped to Dock Icon Callback as a `string`
|
+| **Type** | Method |
+| **Description** | Returns the ID of the current Text Dropped to Dock Icon Callback |
+| **Parameters** | |
+| **Returns** | - The ID of the current File Dropped to Dock Icon Callback as a
string
|
#### [new](#new)
| **Signature** | `cp.config.fileDroppedToDockIconCallback:new(id, callbackFn) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new File Dropped to Dock Icon Callback. |
-| **Parameters** | - * `id` - The unique ID for this callback.
|
-| **Returns** | - table that has been created
|
+| **Type** | Method |
+| **Description** | Creates a new File Dropped to Dock Icon Callback. |
+| **Parameters** | id - The unique ID for this callback.
|
+| **Returns** | - table that has been created
|
diff --git a/api/cp/cp.config.md b/api/cp/cp.config.md
index a55c98d..502c278 100644
--- a/api/cp/cp.config.md
+++ b/api/cp/cp.config.md
@@ -11,14 +11,15 @@ Manage CommandPost's constants and settings.
## API Overview
* Constants - Useful values which cannot be changed
+ * [appBuild](#appbuild)
* [appName](#appname)
* [appVersion](#appversion)
* [assetsPath](#assetspath)
* [basePath](#basepath)
* [bundledPluginsPath](#bundledpluginspath)
* [bundleID](#bundleid)
+ * [cachePath](#cachepath)
* [configPrefix](#configprefix)
- * [developerMode](#developermode)
* [iconPath](#iconpath)
* [languagePath](#languagepath)
* [menubarIconPath](#menubariconpath)
@@ -28,10 +29,12 @@ Manage CommandPost's constants and settings.
* [scriptPath](#scriptpath)
* [sourceExtensions](#sourceextensions)
* [sourceWatcher](#sourcewatcher)
+ * [translationURL](#translationurl)
* [userConfigRootPath](#userconfigrootpath)
* [userPluginsPath](#userpluginspath)
* Variables - Configurable values
* [automaticScriptReloading](#automaticscriptreloading)
+ * [watcher](#watcher)
* Functions - API calls offered directly by the extension
* [application](#application)
* [get](#get)
@@ -41,199 +44,224 @@ Manage CommandPost's constants and settings.
* [unwatch](#unwatch)
* [watch](#watch)
* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [developerMode](#developermode)
* [frontmost](#frontmost)
## API Documentation
### Constants
+#### [appBuild](#appbuild)
+| **Signature** | `cp.config.appBuild -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Application Build |
+
#### [appName](#appname)
-| **Signature** | `cp.config.appName` |
+| **Signature** | `cp.config.appName -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The name of the Application |
+| **Type** | Constant |
+| **Description** | The name of the Application |
#### [appVersion](#appversion)
-| **Signature** | `cp.config.appVersion` |
+| **Signature** | `cp.config.appVersion -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Prefix used for Configuration Settings |
+| **Type** | Constant |
+| **Description** | Application Version |
#### [assetsPath](#assetspath)
-| **Signature** | `cp.config.assetsPath` |
+| **Signature** | `cp.config.assetsPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to where Application Assets are stored |
+| **Type** | Constant |
+| **Description** | Path to where Application Assets are stored |
#### [basePath](#basepath)
-| **Signature** | `cp.config.basePath` |
+| **Signature** | `cp.config.basePath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to where the Extensions & Plugins folders are stored. |
+| **Type** | Constant |
+| **Description** | Path to where the Extensions & Plugins folders are stored. |
#### [bundledPluginsPath](#bundledpluginspath)
-| **Signature** | `cp.config.bundledPluginsPath` |
+| **Signature** | `cp.config.bundledPluginsPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The path to bundled plugins |
+| **Type** | Constant |
+| **Description** | The path to bundled plugins |
#### [bundleID](#bundleid)
-| **Signature** | `cp.config.bundleID` |
+| **Signature** | `cp.config.bundleID -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Application's Bundle ID |
+| **Type** | Constant |
+| **Description** | Application's Bundle ID |
-#### [configPrefix](#configprefix)
-| **Signature** | `cp.config.configPrefix` |
+#### [cachePath](#cachepath)
+| **Signature** | `cp.config.cachePath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Prefix used for Configuration Settings |
+| **Type** | Constant |
+| **Description** | The path to the CommandPost Cache folder. |
-#### [developerMode](#developermode)
-| **Signature** | `cp.config.developerMode ` |
+#### [configPrefix](#configprefix)
+| **Signature** | `cp.config.configPrefix -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | When `true`, the app is in developer mode. |
+| **Type** | Constant |
+| **Description** | Prefix used for Configuration Settings |
#### [iconPath](#iconpath)
-| **Signature** | `cp.config.iconPath` |
+| **Signature** | `cp.config.iconPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to the Application Icon |
+| **Type** | Constant |
+| **Description** | Path to the Application Icon |
#### [languagePath](#languagepath)
-| **Signature** | `cp.config.languagePath` |
+| **Signature** | `cp.config.languagePath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to the Languages Folder |
+| **Type** | Constant |
+| **Description** | Path to the Languages Folder |
#### [menubarIconPath](#menubariconpath)
-| **Signature** | `cp.config.menubarIconPath` |
+| **Signature** | `cp.config.menubarIconPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to the Menubar Application Icon |
+| **Type** | Constant |
+| **Description** | Path to the Menubar Application Icon |
#### [pluginPaths](#pluginpaths)
-| **Signature** | `cp.config.pluginPaths` |
+| **Signature** | `cp.config.pluginPaths -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Table of Plugins Paths. Earlier entries take precedence. |
+| **Type** | Constant |
+| **Description** | Table of Plugins Paths. Earlier entries take precedence. |
#### [privacyPolicyURL](#privacypolicyurl)
-| **Signature** | `cp.config.privacyPolicyURL` |
+| **Signature** | `cp.config.privacyPolicyURL -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | URL for Privacy Policy |
+| **Type** | Constant |
+| **Description** | URL for Privacy Policy |
#### [processID](#processid)
-| **Signature** | `cp.config.processID` |
+| **Signature** | `cp.config.processID -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Application's Process ID |
+| **Type** | Constant |
+| **Description** | Application's Process ID |
#### [scriptPath](#scriptpath)
-| **Signature** | `cp.config.scriptPath` |
+| **Signature** | `cp.config.scriptPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Path to where Application Scripts are stored |
+| **Type** | Constant |
+| **Description** | Path to where Application Scripts are stored |
#### [sourceExtensions](#sourceextensions)
-| **Signature** | `cp.config.sourceExtensions` |
+| **Signature** | `cp.config.sourceExtensions -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | Extensions for files which will trigger a reload when modified. |
+| **Type** | Constant |
+| **Description** | Extensions for files which will trigger a reload when modified. |
#### [sourceWatcher](#sourcewatcher)
-| **Signature** | `cp.config.sourceWatcher` |
+| **Signature** | `cp.config.sourceWatcher -> SourceWatcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | A `cp.sourcewatcher` that will watch for source files and reload CommandPost if any change. |
+| **Type** | Constant |
+| **Description** | A `cp.sourcewatcher` that will watch for source files and reload CommandPost if any change. |
+
+#### [translationURL](#translationurl)
+| **Signature** | `cp.config.translationURL -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | URL for Translations |
#### [userConfigRootPath](#userconfigrootpath)
-| **Signature** | `cp.config.userConfigRootPath` |
+| **Signature** | `cp.config.userConfigRootPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The path to user configuration folders |
+| **Type** | Constant |
+| **Description** | The path to user configuration folders |
#### [userPluginsPath](#userpluginspath)
-| **Signature** | `cp.config.userPluginsPath` |
+| **Signature** | `cp.config.userPluginsPath -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The path to user plugins |
+| **Type** | Constant |
+| **Description** | The path to user plugins |
### Variables
#### [automaticScriptReloading](#automaticscriptreloading)
| **Signature** | `cp.config.automaticScriptReloading ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Variable |
-| **Description** | Automatic Script Reloading. |
+| **Type** | Variable |
+| **Description** | Automatic Script Reloading. |
+
+#### [watcher](#watcher)
+| **Signature** | `cp.config.watcher() -> watcher` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Config Watcher |
### Functions
#### [application](#application)
| **Signature** | `cp.config.application() -> hs.application object` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the Application as a hs.application object |
+| **Type** | Function |
+| **Description** | Returns the Application as a hs.application object |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [get](#get)
| **Signature** | `cp.config.get(key[, defaultValue]) -> string or boolean or number or nil or table or binary data` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Loads a setting |
+| **Type** | Function |
+| **Description** | Loads a setting |
| **Parameters** | - key - A string containing the name of the setting
- defaultValue - A default value if the setting doesn't already exist
|
-| **Returns** | |
+| **Returns** | |
#### [prop](#prop)
| **Signature** | `cp.config.prop(key[, defaultValue]) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a `cp.prop` instance connected to the value of the specified key. When the value is modified, it will be notified. |
-| **Parameters** | - * `key` - The configuration setting key.
- * `defaultValue` - The default value if the key has not been set.
|
-| **Returns** | - * A `cp.prop` instance for the key.
|
+| **Type** | Function |
+| **Description** | Returns a `cp.prop` instance connected to the value of the specified key. When the value is modified, it will be notified. |
+| **Parameters** | key - The configuration setting key.defaultValue - The default value if the key has not been set.
|
+| **Returns** | - A
cp.prop instance for the key.
|
#### [reset](#reset)
| **Signature** | `cp.config.reset()` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Resets all the settings for the Application |
+| **Type** | Function |
+| **Description** | Resets all the settings for the Application |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [set](#set)
| **Signature** | `cp.config.set(key, value)` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Saves a setting with common datatypes |
-| **Parameters** | - `key` - A string containing the name of the setting
- `value` - An optional value for the setting. Valid datatypes are:
- string
- number
- boolean
- nil
- table (which may contain any of the same valid datatypes)
- if no value is provided, it is assumed to be nil
|
-| **Returns** | |
-| **Notes** | - This function cannot set dates or raw data types
|
+| **Type** | Function |
+| **Description** | Saves a setting with common datatypes |
+| **Parameters** | key - A string containing the name of the settingvalue - An optional value for the setting. Valid datatypes are:- string
- number
- boolean
- nil
- table (which may contain any of the same valid datatypes)
- if no value is provided, it is assumed to be nil
|
+| **Returns** | |
+| **Notes** | - This function cannot set dates or raw data types
|
#### [unwatch](#unwatch)
| **Signature** | `cp.config.unwatch(id)` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Unregisters the watcher with the specified ID. |
-| **Parameters** | - `id` - The ID, originally returned from the `watch` function.
|
-| **Returns** | - `true` if a watcher with the ID existed and was successfully removed.
|
+| **Type** | Function |
+| **Description** | Unregisters the watcher with the specified ID. |
+| **Parameters** | id - The ID, originally returned from the watch function.
|
+| **Returns** | true if a watcher with the ID existed and was successfully removed.
|
#### [watch](#watch)
| **Signature** | `cp.config.watch(events) -> id` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Watches for config events. |
-| **Parameters** | - `events` - a table containing functions for each event to watch for.
|
-| **Returns** | - a unique ID that can be used to `unwatch`.
|
-| **Notes** | - Supported events:
- ** `reset()` - occurs after CommandPost's settings are reset.
|
+| **Type** | Function |
+| **Description** | Watches for config events. |
+| **Parameters** | events - a table containing functions for each event to watch for.
|
+| **Returns** | - a unique ID that can be used to
unwatch.
|
+| **Notes** | - Supported events: **
reset() - occurs after CommandPost's settings are reset.
|
### Fields
+#### [developerMode](#developermode)
+| **Signature** | `cp.config.developerMode ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | When `true`, the app is in developer mode. |
+
#### [frontmost](#frontmost)
| **Signature** | `cp.config.frontmost ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Returns whether or not the Application is frontmost. |
+| **Type** | Field |
+| **Description** | Returns whether or not the Application is frontmost. |
diff --git a/api/cp/cp.config.shutdownCallback.md b/api/cp/cp.config.shutdownCallback.md
index 80a534a..900253a 100644
--- a/api/cp/cp.config.shutdownCallback.md
+++ b/api/cp/cp.config.shutdownCallback.md
@@ -18,40 +18,40 @@ Shutdown Callback Module.
#### [callbackFn](#callbackfn)
| **Signature** | `cp.config.shutdownCallback:callbackFn() -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the callbackFn of the current Shutdown Callback |
-| **Parameters** | |
-| **Returns** | - The callbackFn of the current Shutdown Callback
|
+| **Type** | Method |
+| **Description** | Returns the callbackFn of the current Shutdown Callback |
+| **Parameters** | |
+| **Returns** | - The callbackFn of the current Shutdown Callback
|
#### [get](#get)
| **Signature** | `cp.config.shutdownCallback:get(id) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new Shutdown Callback. |
-| **Parameters** | - * `id` - The unique ID for the callback you want to return.
|
-| **Returns** | - table containing the callback
|
+| **Type** | Method |
+| **Description** | Creates a new Shutdown Callback. |
+| **Parameters** | id - The unique ID for the callback you want to return.
|
+| **Returns** | - table containing the callback
|
#### [getAll](#getall)
| **Signature** | `cp.config.shutdownCallback:getAll() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns all of the created Shutdown Callbacks |
-| **Parameters** | |
-| **Returns** | - table containing all of the created callbacks
|
+| **Type** | Method |
+| **Description** | Returns all of the created Shutdown Callbacks |
+| **Parameters** | |
+| **Returns** | - table containing all of the created callbacks
|
#### [id](#id)
| **Signature** | `cp.config.shutdownCallback:id() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ID of the current Shutdown Callback |
-| **Parameters** | |
-| **Returns** | - The ID of the current Shutdown Callback as a `string`
|
+| **Type** | Method |
+| **Description** | Returns the ID of the current Shutdown Callback |
+| **Parameters** | |
+| **Returns** | - The ID of the current Shutdown Callback as a
string
|
#### [new](#new)
| **Signature** | `cp.config.shutdownCallback:new(id, callbackFn) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new Shutdown Callback. |
-| **Parameters** | - * `id` - The unique ID for this callback.
|
-| **Returns** | - table that has been created
|
+| **Type** | Method |
+| **Description** | Creates a new Shutdown Callback. |
+| **Parameters** | id - The unique ID for this callback.
|
+| **Returns** | - table that has been created
|
diff --git a/api/cp/cp.config.textDroppedToDockIconCallback.md b/api/cp/cp.config.textDroppedToDockIconCallback.md
index 866b9d5..361daa4 100644
--- a/api/cp/cp.config.textDroppedToDockIconCallback.md
+++ b/api/cp/cp.config.textDroppedToDockIconCallback.md
@@ -18,40 +18,40 @@ Text Dropped to Dock Icon Callback
#### [callbackFn](#callbackfn)
| **Signature** | `cp.config.textDroppedToDockIconCallback:callbackFn() -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the callbackFn of the current Text Dropped to Dock Icon Callback |
-| **Parameters** | |
-| **Returns** | - The callbackFn of the current Shutdown Callback
|
+| **Type** | Method |
+| **Description** | Returns the callbackFn of the current Text Dropped to Dock Icon Callback |
+| **Parameters** | |
+| **Returns** | - The callbackFn of the current Shutdown Callback
|
#### [get](#get)
| **Signature** | `cp.config.textDroppedToDockIconCallback:get(id) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new Text Dropped to Dock Icon Callback. |
-| **Parameters** | - * `id` - The unique ID for the callback you want to return.
|
-| **Returns** | - table containing the callback
|
+| **Type** | Method |
+| **Description** | Creates a new Text Dropped to Dock Icon Callback. |
+| **Parameters** | id - The unique ID for the callback you want to return.
|
+| **Returns** | - table containing the callback
|
#### [getAll](#getall)
| **Signature** | `cp.config.textDroppedToDockIconCallback:getAll() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns all of the created Text Dropped to Dock Icon Callbacks |
-| **Parameters** | |
-| **Returns** | - table containing all of the created callbacks
|
+| **Type** | Method |
+| **Description** | Returns all of the created Text Dropped to Dock Icon Callbacks |
+| **Parameters** | |
+| **Returns** | - table containing all of the created callbacks
|
#### [id](#id)
| **Signature** | `cp.config.textDroppedToDockIconCallback:id() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the ID of the current Text Dropped to Dock Icon Callback |
-| **Parameters** | |
-| **Returns** | - The ID of the current Shutdown Callback as a `string`
|
+| **Type** | Method |
+| **Description** | Returns the ID of the current Text Dropped to Dock Icon Callback |
+| **Parameters** | |
+| **Returns** | - The ID of the current Shutdown Callback as a
string
|
#### [new](#new)
| **Signature** | `cp.config.textDroppedToDockIconCallback:new(id, callbackFn) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new Text Dropped to Dock Icon Callback. |
-| **Parameters** | - * `id` - The unique ID for this callback.
|
-| **Returns** | - table that has been created
|
+| **Type** | Method |
+| **Description** | Creates a new Text Dropped to Dock Icon Callback. |
+| **Parameters** | id - The unique ID for this callback.
|
+| **Returns** | - table that has been created
|
diff --git a/api/cp/cp.console.history.md b/api/cp/cp.console.history.md
new file mode 100644
index 0000000..03704ad
--- /dev/null
+++ b/api/cp/cp.console.history.md
@@ -0,0 +1,79 @@
+# [docs](index.md) » cp.console.history
+---
+
+Console History Manager.
+
+Based on code by @asmagill
+https://github.com/asmagill/hammerspoon-config-take2/blob/master/utils/_actions/consoleHistory.lua
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [clearHistory](#clearhistory)
+ * [history](#history)
+ * [init](#init)
+ * [pruneHistory](#prunehistory)
+ * [retrieveHistory](#retrievehistory)
+ * [saveHistory](#savehistory)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [cache](#cache)
+
+## API Documentation
+
+### Functions
+
+#### [clearHistory](#clearhistory)
+| **Signature** | `cp.console.history.clearHistory() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Clears the Console History. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [history](#history)
+| **Signature** | `cp.console.history.history(toFind) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets a history item. |
+| **Parameters** | - toFind - Number of the item to find.
|
+| **Returns** | |
+
+#### [init](#init)
+| **Signature** | `cp.console.history.init() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Initialise the module. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [pruneHistory](#prunehistory)
+| **Signature** | `cp.console.history.pruneHistory() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Prune History |
+| **Parameters** | |
+| **Returns** | |
+
+#### [retrieveHistory](#retrievehistory)
+| **Signature** | `cp.console.history.retrieveHistory() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Retrieve's the Console History. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [saveHistory](#savehistory)
+| **Signature** | `cp.console.history.saveHistory() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Saves the Console History. |
+| **Parameters** | |
+| **Returns** | |
+
+### Fields
+
+#### [cache](#cache)
+| **Signature** | `cp.console.history.cache ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Console History Cache |
+
diff --git a/api/cp/cp.deferred.md b/api/cp/cp.deferred.md
new file mode 100644
index 0000000..86dd58f
--- /dev/null
+++ b/api/cp/cp.deferred.md
@@ -0,0 +1,91 @@
+# [docs](index.md) » cp.deferred
+---
+
+This extension makes it simple to defer multiple actions after a delay from the initial execution.
+ Unlike `hs.timer.delayed`, the delay will not be extended
+with subsequent `run()` calls, but the delay will trigger again if `run()` is called again later.
+
+For example:
+
+```lua
+local update = deferred.new(1) -- defer 1 second
+:action(function() print("Updated!"") end)
+-- do something
+update()
+-- do something else
+update()
+-- one second after the inital call to `update()`, one "Updated!" is printed.
+```
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [action](#action)
+ * [delay](#delay)
+ * [run](#run)
+ * [secondsRemaining](#secondsremaining)
+ * [stop](#stop)
+ * [waiting](#waiting)
+
+## API Documentation
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.deferred.new(delay) -> cp.deferred` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `defer` instance, which will trigger any added `action`s by a set delay after |
+| **Parameters** | - delay - The number of seconds to delay when
run() is initally called.
|
+| **Returns** | - The new
cp.deferred instance.
|
+
+### Methods
+
+#### [action](#action)
+| **Signature** | `cp.deferred:action(actionFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds the `action` the the list that will be called when the timer goes off. |
+| **Parameters** | |
+
+#### [delay](#delay)
+| **Signature** | `cp.deferred:delay([value]) -> self | number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets/gets the delay period. If no `value` is provided, the current delay is returned. |
+| **Parameters** | - value - the new delay value.
|
+| **Returns** | - The
cp.deferred instance if a new value is provided, or the current delay if not.
|
+
+#### [run](#run)
+| **Signature** | `cp.deferred:run() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Ensures that the actions will run after the `delay`. |
+| **Parameters** | |
+| **Returns** | - The
cp.deferred instance.
|
+
+#### [secondsRemaining](#secondsremaining)
+| **Signature** | `cp.deferred:secondsRemaining() -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the number of seconds until the next execution, or `nil` if it's not running. |
+| **Parameters** | |
+| **Returns** | - The number of seconds until execution.
|
+
+#### [stop](#stop)
+| **Signature** | `cp.deferred:stop() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Stops any execution of any deferred actions, if it is currently running. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [waiting](#waiting)
+| **Signature** | `cp.deferred:waiting() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the defer is currently waiting to run. |
+| **Parameters** | |
+| **Returns** | true if the deferred action is waiting to execute.
|
+
diff --git a/api/cp/cp.delegator.md b/api/cp/cp.delegator.md
new file mode 100644
index 0000000..7c32cfb
--- /dev/null
+++ b/api/cp/cp.delegator.md
@@ -0,0 +1,88 @@
+# [docs](index.md) » cp.delegator
+---
+
+`cp.delegator` is a [middleclass](https://github.com/kikito/middleclass) "mix-in" that allows for
+simple specification of "delegated" values and functions in class definitions.
+
+This allows you to compose an object from other objects, but allow methods or values from the
+composed values to be accessed directly via the composing parent object.
+
+For example:
+
+```lua
+local class = require "middleclass"
+local delegator = require "cp.delegator"
+
+local Minion = class("Minion")
+
+function Minion:doTask()
+ -- does something...
+ return true
+end
+
+local Boss = class("Boss"):include(delegator):delegateTo("minion")
+
+function Boss:initialize()
+end
+
+function Boss:hireMinion(minion)
+ self.minion = minion
+end
+
+local johnSmith = Boss()
+local joeBloggs = Minion()
+
+johnSmith:doTask() -- error: no 'doTask' method available.
+
+johnSmith:hireMinion(minion)
+johnSmith:doTask() -- can now do the task, because his minion does it for him.
+johnSmith.minion:doTask() -- The exact same thing.
+```
+
+The order that `delegator` is included with other mixins can affect how it functions. For example,
+when mixing with `cp.lazy`, if `cp.lazy` is mixed in second, like so:
+
+```lua
+local MyClass = class("MyClass"):include(delegator):include(lazy):delegateTo("delegate")
+
+function MyClass:initialize()
+ self.delegate = {
+ value = "delegated value"
+ }
+end
+
+function MyClass.lazy.value()
+ return "lazy value"
+end
+
+local myInstance = MyClass()
+assert(myInstance.value == "delegated value") -- passes
+assert(myInstance.delegated.value == "delegated value") -- passes
+```
+
+...then any delegated methods will take priority over lazy ones. Most likely you want to put `lazy` first, like so:
+
+```lua
+local MyClass = class("MyClass"):include(lazy):include(delegator):delegateTo("delegate")
+
+function MyClass:initialize()
+ self.delegate = {
+ value = "delegated value"
+ }
+end
+
+function MyClass.lazy.value()
+ return "lazy value"
+end
+
+local myInstance = MyClass()
+assert(myInstance.value == "lazy value") -- passes
+assert(myInstance.delegated.value == "delegated value") -- passes
+```
+
+The easy way to remember is to read them together - "lazy delegator" sounds better than "delegator lazy".
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.dev.md b/api/cp/cp.dev.md
new file mode 100644
index 0000000..ee5bad9
--- /dev/null
+++ b/api/cp/cp.dev.md
@@ -0,0 +1,121 @@
+# [docs](index.md) » cp.dev
+---
+
+A set of handy developer tools for CommandPost.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [elementAtMouse](#elementatmouse)
+ * [findUnusedLanguageStrings](#findunusedlanguagestrings)
+ * [highlight](#highlight)
+ * [highlightFrame](#highlightframe)
+ * [highlightPoint](#highlightpoint)
+ * [hotkey](#hotkey)
+ * [inspect](#inspect)
+ * [inspectAtMouse](#inspectatmouse)
+ * [inspectElement](#inspectelement)
+ * [inspectElementAtMousePath](#inspectelementatmousepath)
+ * [test](#test)
+ * [which](#which)
+
+## API Documentation
+
+### Functions
+
+#### [elementAtMouse](#elementatmouse)
+| **Signature** | `cp.dev.elementAtMouse() -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the AX element under the current mouse position. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [findUnusedLanguageStrings](#findunusedlanguagestrings)
+| **Signature** | `cp.dev.findUnusedLanguageStrings() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Searches for any unused language strings in English.json. |
+| **Parameters** | |
+| **Returns** | - A string with the results of the search.
|
+
+#### [highlight](#highlight)
+| **Signature** | `cp.dev.highlight(element) -> axuielementObject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Highlights an AX element on the screen. |
+| **Parameters** | - element - The AX element to highlight.
|
+| **Returns** | |
+
+#### [highlightFrame](#highlightframe)
+| **Signature** | `cp.dev.highlightFrame(frame) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Highlights aa frame on the screen. |
+| **Parameters** | - frame - A
hs.geometry frame object.
|
+| **Returns** | |
+
+#### [highlightPoint](#highlightpoint)
+| **Signature** | `cp.dev.highlightPoint(point) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Highlights a point on the screen. |
+| **Parameters** | - point - A
hs.geometry point object.
|
+| **Returns** | |
+
+#### [hotkey](#hotkey)
+| **Signature** | `cp.dev.hotkey(fn) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Assigns a function to the CONTROL+OPTION+COMMAND+SHIFT+Q keyboard combination. |
+| **Parameters** | - fn - A function to execute when the hotkey is triggered.
|
+| **Returns** | |
+
+#### [inspect](#inspect)
+| **Signature** | `cp.dev.inspect(item, options) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Inspect an item. |
+| **Parameters** | - item - The object to inspect.
- options - Any additional options to pass along to
cp.dev.inspectElement.
|
+| **Returns** | |
+
+#### [inspectAtMouse](#inspectatmouse)
+| **Signature** | `cp.dev.inspectAtMouse(options) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Inspects an AX element under the current mouse position. |
+| **Parameters** | - options - Any additional options to pass along to
cp.dev.inspectElement.
|
+| **Returns** | |
+
+#### [inspectElement](#inspectelement)
+| **Signature** | `cp.dev.inspectElement(element[, options]) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Inspect an AX element. Writes results to Debug Console. |
+| **Parameters** | - element - The element to inspect.
- options - A table containing any optional values.
|
+| **Returns** | |
+| **Notes** | - The options table accepts the following parameters:
- depth - A number representing the maximum depth to recurse into variable.
|
+
+#### [inspectElementAtMousePath](#inspectelementatmousepath)
+| **Signature** | `cp.dev.inspectElementAtMousePath() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Inspects an AX element at the mouse path. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [test](#test)
+| **Signature** | `cp.dev.test(id) -> cp.test` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | This function will return a [cp.test](cp.test.md) with either the |
+| **Parameters** | |
+| **Returns** | |
+
+#### [which](#which)
+| **Signature** | `cp.dev.which(cmd) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | The which utility takes a list of command names and searches the path for |
+| **Parameters** | - cmd - The parameters to pass along to the
which executable.
|
+| **Returns** | - The path or
nil and the error message if an error occurs.
|
+
diff --git a/api/cp/cp.developer.md b/api/cp/cp.developer.md
deleted file mode 100644
index e88dca1..0000000
--- a/api/cp/cp.developer.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# [docs](index.md) » cp.developer
----
-
-Developer Tools
-
-
-## API Overview
-
-## API Documentation
-
diff --git a/api/cp/cp.dialog.md b/api/cp/cp.dialog.md
index 62a17da..1671d78 100644
--- a/api/cp/cp.dialog.md
+++ b/api/cp/cp.dialog.md
@@ -3,7 +3,9 @@
A collection of handy Dialog tools for CommandPost.
-This extension should no longer be used in favour of `hs.dialog`.
+Where possible, `hs.dialog` should be used instead of `cp.dialog` - however,
+there are still some instances where `cp.dialog` is preferred (i.e. if you
+want a dialog box to appear as if it's been generated by Final Cut Pro).
## API Overview
* Functions - API calls offered directly by the extension
@@ -25,89 +27,89 @@ This extension should no longer be used in favour of `hs.dialog`.
#### [displayAlertMessage](#displayalertmessage)
| **Signature** | `cp.dialog.displayAlertMessage(message) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display an Alert Dialog (with stop icon). |
+| **Type** | Function |
+| **Description** | Display an Alert Dialog (with stop icon). |
| **Parameters** | - message - The message you want to display as a string
|
-| **Returns** | |
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.alert`
|
+| **Returns** | |
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.alert
|
#### [displayChooseFile](#displaychoosefile)
| **Signature** | `cp.dialog.displayChooseFile(whatMessage, fileType[, defaultLocation]) -> boolean or string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display a Choose File Dialog Box. |
-| **Parameters** | - whatMessage - The message you want to display as a string
- fileType - The filetype you wish to display
- defaultLocation - Path to Default Location
|
-| **Returns** | - `false` if cancelled if pressed otherwise the path to the file as a string
|
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.chooseFileOrFolder`
|
+| **Type** | Function |
+| **Description** | Display a Choose File Dialog Box. |
+| **Parameters** | - whatMessage - The message you want to display as a string.
- fileType - The filetype you wish to display as either a string or a table of strings.
- defaultLocation - Path to Default Location. Defaults to the desktop.
|
+| **Returns** | false if cancelled if pressed otherwise the path to the file as a string
|
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.chooseFileOrFolder
|
#### [displayChooseFolder](#displaychoosefolder)
| **Signature** | `cp.dialog.displayChooseFolder(whatMessage[, defaultLocation]) -> boolean or string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display a Choose Folder Dialog Box. |
-| **Parameters** | - whatMessage - The message you want to display as a string
- defaultLocation - Path to Default Location
|
-| **Returns** | - `false` if cancelled if pressed otherwise the path to the folder as a string
|
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.chooseFileOrFolder`
|
+| **Type** | Function |
+| **Description** | Display a Choose Folder Dialog Box. |
+| **Parameters** | - whatMessage - The message you want to display as a string
- defaultLocation - An optional path (defaults to the user desktop)
|
+| **Returns** | false if cancelled if pressed otherwise the path to the folder as a string
|
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.chooseFileOrFolder
|
#### [displayChooseFromList](#displaychoosefromlist)
| **Signature** | `cp.dialog.displayChooseFromList(dialogPrompt, listOptions, defaultItems) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Displays a list that the user can select items from. |
+| **Type** | Function |
+| **Description** | Displays a list that the user can select items from. |
| **Parameters** | - dialogPrompt - The message you want to display as a string
- listOptions - A table containing all the options you want to include in the list as strings
- defaultItems - A table containing all the options you want select by default in the list as strings
|
-| **Returns** | - A table with the selected items as strings
|
+| **Returns** | - A table with the selected items as strings
|
#### [displayErrorMessage](#displayerrormessage)
| **Signature** | `cp.dialog.displayErrorMessage(whatError) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display an Error Message Dialog, given the user the option to submit feedback. |
+| **Type** | Function |
+| **Description** | Display an Error Message Dialog, given the user the option to submit feedback. |
| **Parameters** | - whatError - The message you want to display as a string
|
-| **Returns** | |
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.alert`
|
+| **Returns** | |
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.alert
|
#### [displayMessage](#displaymessage)
| **Signature** | `cp.dialog.displayMessage(whatMessage, optionalButtons) -> object` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display an Error Message Dialog, given the user the option to submit feedback. |
+| **Type** | Function |
+| **Description** | Display an Error Message Dialog, given the user the option to submit feedback. |
| **Parameters** | - whatError - The message you want to display as a string
|
-| **Returns** | |
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.alert`
|
+| **Returns** | |
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.alert
|
#### [displayNotification](#displaynotification)
| **Signature** | `cp.dialog.displayNotification(whatMessage) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display's an alert on the screen. |
+| **Type** | Function |
+| **Description** | Display's an alert on the screen. |
| **Parameters** | - whatMessage - The message you want to display as a string
|
-| **Returns** | |
-| **Notes** | - Any existing alerts will be removed to make way for the new one.
|
+| **Returns** | |
+| **Notes** | - Any existing alerts will be removed to make way for the new one.
|
#### [displaySmallNumberTextBoxMessage](#displaysmallnumbertextboxmessage)
| **Signature** | `cp.dialog.displaySmallNumberTextBoxMessage(whatMessage, whatErrorMessage, defaultAnswer) -> boolean or string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display a dialog box prompting the user for a number input. It accepts only entries that coerce directly to class integer. |
+| **Type** | Function |
+| **Description** | Display a dialog box prompting the user for a number input. It accepts only entries that coerce directly to class integer. |
| **Parameters** | - whatMessage - The message you want to display as a string
- whatErrorMessage - The error message that appears if a user input is invalid
- defaultAnswer - The default value of the text box
|
-| **Returns** | - `false` if cancelled if pressed otherwise the text entered in the dialog box
|
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.textPrompt`
|
+| **Returns** | false if cancelled if pressed otherwise the text entered in the dialog box
|
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.textPrompt
|
#### [displayTextBoxMessage](#displaytextboxmessage)
| **Signature** | `cp.dialog.displayTextBoxMessage(whatMessage, whatErrorMessage, defaultAnswer, validationFn) -> boolean or string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Display a dialog box prompting the user for a text input. |
+| **Type** | Function |
+| **Description** | Display a dialog box prompting the user for a text input. |
| **Parameters** | - whatMessage - The message you want to display as a string
- whatErrorMessage - The error message that appears if a user input is invalid
- defaultAnswer - The default value of the text box
- validationFn - A function that takes one parameter and returns a boolean value
|
-| **Returns** | - `false` if cancelled if pressed otherwise the text entered in the dialog box
|
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.textPrompt`
|
+| **Returns** | false if cancelled if pressed otherwise the text entered in the dialog box
|
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.textPrompt
|
#### [displayYesNoQuestion](#displayyesnoquestion)
-| **Signature** | `cp.dialog.displayYesNoQuestion(message) -> boolean` |
+| **Signature** | `cp.dialog.displayYesNoQuestion(message, informativeText) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Displays a "Yes" or "No" question. |
-| **Parameters** | - whatMessage - The message you want to display as a string
|
-| **Returns** | - `true` if yes is clicked otherwise `false`
|
-| **Notes** | - IMPORTANT: This should no longer be used in favour of `hs.dialog.alert`
|
+| **Type** | Function |
+| **Description** | Displays a "Yes" or "No" question. |
+| **Parameters** | - whatMessage - The message you want to display as a string
- informativeText - Informative text.
|
+| **Returns** | true if yes is clicked otherwise false
|
+| **Notes** | - IMPORTANT: This should no longer be used in favour of
hs.dialog.alert
|
diff --git a/api/cp/cp.disk.md b/api/cp/cp.disk.md
new file mode 100644
index 0000000..c063b80
--- /dev/null
+++ b/api/cp/cp.disk.md
@@ -0,0 +1,71 @@
+# [docs](index.md) » cp.disk
+---
+
+Provides provides details about disk devices attached to the system.
+These may be mounted, unmounted, and may include devices which do not
+mount, or appear in the user interface by default.
+
+The various methods have `options` table parameters, which allow filtering
+to be performed on the operations. These tables can have any combination of
+the following:
+
+* `physical` - only process physical drives.
+* `virtual` - only process virtual drives.
+* `external` - only external drives.
+* `internal` - only internal drives.
+* `ejectable` - only drives that can be ejected.
+* `bootable` - only bootable drives.
+* `writable` - only writeable drives.
+* `root` - only top-level drives (vs partitions)
+* `hidden` - by default, only 'unhidden' devices are returned.
+* `mounted` - only mounted drives.
+* `unmounted` - only unmounted drives.
+
+```lua
+local disk = require("cp.disk")
+local externalDrives = disk.devices({physical = true, ejectable = true})
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [eject](#eject)
+ * [mount](#mount)
+ * [unmount](#unmount)
+ * [visit](#visit)
+
+## API Documentation
+
+### Functions
+
+#### [eject](#eject)
+| **Signature** | `cp.disk.eject(options) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Unmounts and ejects (where appropriate) all disks matching the provided `options`. |
+| **Parameters** | - options - The table of filter options.
|
+| **Returns** | |
+
+#### [mount](#mount)
+| **Signature** | `cp.disk.mount(options) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Mounts all disks matching the provided `options`. |
+| **Parameters** | - options - The table of filter options.
|
+| **Returns** | |
+
+#### [unmount](#unmount)
+| **Signature** | `cp.disk.unmount(options) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Unmounts all disks matching the provided `options`. |
+| **Parameters** | - options - The table of filter options.
|
+| **Returns** | |
+
+#### [visit](#visit)
+| **Signature** | `cp.disk.visit(options, fn) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Visits all drives matching the `options` and executes the |
+| **Parameters** | - options - The table of filter options.
- fn - The function to execute.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.docs.md b/api/cp/cp.docs.md
new file mode 100644
index 0000000..b2f95ce
--- /dev/null
+++ b/api/cp/cp.docs.md
@@ -0,0 +1,46 @@
+# [docs](index.md) » cp.docs
+---
+
+Documentation Tools.
+
+These tools are for helping generate CommandPost documentation.
+
+Example Usage:
+```lua
+require("cp.docs").generate()
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [generate](#generate)
+ * [generateExtensionLinks](#generateextensionlinks)
+ * [updateDeveloperGuideSummary](#updatedeveloperguidesummary)
+
+## API Documentation
+
+### Functions
+
+#### [generate](#generate)
+| **Signature** | `cp.docs.generate() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Generates the CommandPost Developers Guide. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [generateExtensionLinks](#generateextensionlinks)
+| **Signature** | `cp.docs.generateExtensionLinks(folder) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns markup of all of the API links for a specific group of extensions. |
+| **Parameters** | - folder - The folder you want to process (i.e. "cp", "plugins" or "hs").
|
+| **Returns** | - The result as a string, otherwise
nil if an error occurs.
|
+
+#### [updateDeveloperGuideSummary](#updatedeveloperguidesummary)
+| **Signature** | `cp.docs.updateDeveloperGuideSummary() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Updates the Developer Guide Summary. |
+| **Parameters** | |
+| **Returns** | true if successful otherwise nil
|
+
diff --git a/api/cp/cp.feedback.md b/api/cp/cp.feedback.md
index bbe7db3..51a8eae 100644
--- a/api/cp/cp.feedback.md
+++ b/api/cp/cp.feedback.md
@@ -4,18 +4,56 @@
Feedback Form.
## API Overview
+* Variables - Configurable values
+ * [defaultHeight](#defaultheight)
+ * [defaultTitle](#defaulttitle)
+ * [defaultWidth](#defaultwidth)
+ * [position](#position)
+ * [quitOnComplete](#quitoncomplete)
* Functions - API calls offered directly by the extension
* [showFeedback](#showfeedback)
## API Documentation
+### Variables
+
+#### [defaultHeight](#defaultheight)
+| **Signature** | `cp.feedback.defaultHeight -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Default webview height. |
+
+#### [defaultTitle](#defaulttitle)
+| **Signature** | `cp.feedback.defaultTitle -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Default webview title. |
+
+#### [defaultWidth](#defaultwidth)
+| **Signature** | `cp.feedback.defaultWidth -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Default webview width. |
+
+#### [position](#position)
+| **Signature** | `cp.feedback.position -> prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Webview Position. |
+
+#### [quitOnComplete](#quitoncomplete)
+| **Signature** | `cp.feedback.quitOnComplete -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Quit on complete? |
+
### Functions
#### [showFeedback](#showfeedback)
| **Signature** | `cp.feedback.showFeedback(quitOnComplete) -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Displays the Feedback Screen. |
-| **Parameters** | - quitOnComplete - `true` if you want CommandPost to quit after the Feedback is complete otherwise `false`
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Displays the Feedback Screen. |
+| **Parameters** | - quitOnComplete -
true if you want CommandPost to quit after the Feedback is complete otherwise false
|
+| **Returns** | |
diff --git a/api/cp/cp.highland2.Document.md b/api/cp/cp.highland2.Document.md
new file mode 100644
index 0000000..b959380
--- /dev/null
+++ b/api/cp/cp.highland2.Document.md
@@ -0,0 +1,40 @@
+# [docs](index.md) » cp.highland2.Document
+---
+
+Highland 2 Document [Window](cp.ui.Window.md) extension.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [documentPath](#documentpath)
+ * [doShow](#doshow)
+ * [sidebar](#sidebar)
+ * [text](#text)
+
+## API Documentation
+
+### Fields
+
+#### [documentPath](#documentpath)
+| **Signature** | `cp.highland2.Document:documentPath() -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current path for the document. |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.highland2.Document.doShow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will show the `Document` when run. |
+
+#### [sidebar](#sidebar)
+| **Signature** | `cp.highland2.Document.sidebar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Sidebar](cp.highland2.Sidebar.md) for the document window. |
+
+#### [text](#text)
+| **Signature** | `cp.highland2.Document.text ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [TextArea](cp.ui.TextArea.md) containing the document text. |
+
diff --git a/api/cp/cp.highland2.Sidebar.md b/api/cp/cp.highland2.Sidebar.md
new file mode 100644
index 0000000..a1676f8
--- /dev/null
+++ b/api/cp/cp.highland2.Sidebar.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.highland2.Sidebar
+---
+
+Represents the sidebar for a document opened in Highland.
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [document](#document)
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+
+## API Documentation
+
+### Fields
+
+#### [document](#document)
+| **Signature** | `cp.highland2.Sidebar.document ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [Document](cp.highland2.Document.md) this `Sidebar` belongs to. |
+
+#### [doHide](#dohide)
+| **Signature** | `cp.highland2.Sidebar.doHide ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to hide the Sidebar, if possible. |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.highland2.Sidebar.doShow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to show the Sidebar, if possible. |
+
diff --git a/api/cp/cp.highland2.app.md b/api/cp/cp.highland2.app.md
new file mode 100644
index 0000000..278be90
--- /dev/null
+++ b/api/cp/cp.highland2.app.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.highland2.app
+---
+
+The [cp.app](cp.app.md) for Highland 2.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.highland2.md b/api/cp/cp.highland2.md
new file mode 100644
index 0000000..8cd4906
--- /dev/null
+++ b/api/cp/cp.highland2.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.highland2
+---
+
+Highland 2 support.
+
+## Submodules
+ * [cp.highland2.Document](cp.highland2.Document.md)
+ * [cp.highland2.Sidebar](cp.highland2.Sidebar.md)
+ * [cp.highland2.app](cp.highland2.app.md)
+
+## API Overview
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [documents](#documents)
+ * [focusedDocument](#focuseddocument)
+
+## API Documentation
+
+### Fields
+
+#### [documents](#documents)
+| **Signature** | `cp.highland2.documents ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of [Documents](cp.highland2.Document.md) currently open. |
+
+#### [focusedDocument](#focuseddocument)
+| **Signature** | `cp.highland2.focusedDocument ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The currently-focused [Document](cp.highland2.Document.md), if applicable. |
+
diff --git a/api/cp/cp.i18n.language.md b/api/cp/cp.i18n.language.md
new file mode 100644
index 0000000..3e2e944
--- /dev/null
+++ b/api/cp/cp.i18n.language.md
@@ -0,0 +1,34 @@
+# [docs](index.md) » cp.i18n.language
+---
+
+Provides the set of ISO 693-1/2/3 language codes and names.
+The return value can be iterated as a list, or you can find a
+specific language by either its two-character code (`alpha2`), English-based three-character code (`alpha3B`),
+local name, or English name.
+
+For example:
+
+```lua
+local lang = require("cp.i18n.language")
+print(lang[1]) -- table for "Abkhaz" language
+print(lang.fr) -- table for "French"
+print(lang.fre) -- same table for "French"
+print(lang["Français"]) -- same table for "French"
+print(lang.French) -- same table for "French"
+```
+
+This will return a table containing the following:
+* `alpha2` - The 2-character language code (eg. "en", "fr").
+* `alpha3` - The 3-character language code (eg. "eng", "fra").
+* `alpha3B` - The 3-character English-derived language code (eg. "eng", "fre").
+* `alpha3T` - The 3-character local-language-derived code (eg. "eng", "fra").
+* `localName` - The name in the local language (eg. "English", "Français").
+* `name` - The name in English (eg. "English", "French").
+
+Note: This data was adapted from [arnubol's code](https://github.com/anurbol/languages-iso-639-1-2-3-json)
+under an [MIT license](https://raw.githubusercontent.com/anurbol/languages-iso-639-1-2-3-json/master/LICENSE).
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.i18n.languageID.md b/api/cp/cp.i18n.languageID.md
new file mode 100644
index 0000000..b2134fe
--- /dev/null
+++ b/api/cp/cp.i18n.languageID.md
@@ -0,0 +1,111 @@
+# [docs](index.md) » cp.i18n.languageID
+---
+
+As per [Apple's documentation](https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html#//apple_ref/doc/uid/10000171i-CH15-SW6),
+a `language ID` is a code which identifies either a language used across multiple regions,
+a dialect from a specific region, or a script used in multiple regions. See the [parse](#parse) function for details.
+
+When you parse a code with the [forCode](#forCode) function, it will result in a table that contains a
+reference to the approprate `cp.i18n.language` table, and up to one of either the matching `cp.i18n.region`
+or `cp.i18n.script` tables. These contain the full details for each language/regin/script, as appropriate.
+
+You can also convert the resulting table back to the code via `tostring`, or the [code](#code) method.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+ * [parse](#parse)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [forCode](#forcode)
+ * [forLocaleID](#forlocaleid)
+ * [forParts](#forparts)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [code](#code)
+ * [language](#language)
+ * [region](#region)
+ * [script](#script)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [toLocaleID](#tolocaleid)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.i18n.languageID.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a languageID instance. |
+| **Parameters** | - thing - the thing to check.
|
+| **Returns** | true if the thing is a languageID, otherwise false.
|
+
+#### [parse](#parse)
+| **Signature** | `cp.i18n.languageID.parse(code) -> string, string, string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Parses a `language ID` into three possible string components: |
+| **Parameters** | - code - The
language ID code. Eg. "en-AU".
|
+| **Returns** | - language - The two-character lower-case alpha language code.
- script - the four-character mixed-case alpha script code.
- region - The two-character upper-case alpha region code.
|
+
+### Constructors
+
+#### [forCode](#forcode)
+| **Signature** | `cp.i18n.languageID.forCode(code) -> cp.i18n.languageID, string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates, or retrieves from the cache, a `languageID` instance for the specified `code`. |
+| **Parameters** | - code - The language ID code.
|
+| **Returns** | - The matching
languageID, or nil if the language ID couldn't be found. - The error message, or
nil if there was no problem.
|
+
+#### [forLocaleID](#forlocaleid)
+| **Signature** | `cp.i18n.languageID.forLocaleID(code[, prioritiseScript]) -> cp.i18n.languageID, string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates, or retrieves from the cache, a `languageID` instance for the specified `cp.i18n.localeID`. |
+| **Parameters** | - locale - The
localeID to convert - prioritiseScript - If set to
true and the locale has both a region and script then the script code will be used.
|
+| **Returns** | - The
languageID for the locale, or nil - The error message if there was a problem.
|
+
+#### [forParts](#forparts)
+| **Signature** | `cp.i18n.languageID.forParts(languageCode[, scriptCode[, regionCode]]) -> cp.i18n.languageID` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Returns a `languageID` with the specified parts. |
+| **Parameters** | - languageCode - Language code
- scriptCode - Optional Script code
- regionCode - Optional Region Code
|
+| **Returns** | - A
cp.i18n.languageID object.
|
+
+### Fields
+
+#### [code](#code)
+| **Signature** | `cp.i18n.languageID.code ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The language ID code. |
+
+#### [language](#language)
+| **Signature** | `cp.i18n.languageID.language ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The matching `language` details. |
+
+#### [region](#region)
+| **Signature** | `cp.i18n.languageID.region ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The matching `region` details, if appropriate. Will be `nil` if no region was specified in the `code`. |
+
+#### [script](#script)
+| **Signature** | `cp.i18n.languageID.script ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The matching `script` details, if appropriate. Will be `nil` if no script was specified in the `code`. |
+
+### Methods
+
+#### [toLocaleID](#tolocaleid)
+| **Signature** | `cp.i18n.languageID:toLocaleID() -> cp.i18n.localeID` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `cp.i18n.localeID` equivalent for this `languageID`. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.i18n.localeID.md b/api/cp/cp.i18n.localeID.md
new file mode 100644
index 0000000..b8bef39
--- /dev/null
+++ b/api/cp/cp.i18n.localeID.md
@@ -0,0 +1,108 @@
+# [docs](index.md) » cp.i18n.localeID
+---
+
+As per [Apple's documentation](https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/LanguageandLocaleIDs/LanguageandLocaleIDs.html#//apple_ref/doc/uid/10000171i-CH15-SW6),
+a `local ID` is a code which identifies either a language used across multiple regions,
+a dialect from a specific region, a script used in multiple regions, or a combination of all three.
+See the [parse](#parse) function for details.
+
+When you parse a code with the [forCode](#forCode) function, it will result in a table that contains a
+reference to the approprate `cp.i18n.language` table, and any specified `cp.i18n.region`
+or `cp.i18n.script` tables. These contain the full details for each language/regin/script, as appropriate.
+
+You can also convert the resulting table back to the code via `tostring`, or the [code](#code) method.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+ * [parse](#parse)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [forCode](#forcode)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [code](#code)
+ * [language](#language)
+ * [localName](#localname)
+ * [name](#name)
+ * [region](#region)
+ * [script](#script)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [matches](#matches)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.i18n.localeID.is(other) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `other` is a `localeID`. |
+| **Parameters** | - other - the other value to check.
|
+| **Returns** | true if it is a cp.i18n.locale, otherwise false.
|
+
+#### [parse](#parse)
+| **Signature** | `cp.i18n.localeID.parse(code) -> string, string, string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Parses a `language ID` into three possible string components: |
+| **Parameters** | - code - The
locale ID code. Eg. "en_AU".
|
+| **Returns** | - language - The two-character lower-case alpha language code.
- script - the four-character mixed-case alpha script code.
- region - The two-character upper-case alpha region code.
|
+
+### Constructors
+
+#### [forCode](#forcode)
+| **Signature** | `cp.i18n.localeID.forCode(code) -> cp.i18n.localeID or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates, or retrieves from the cache, a `localeID` instance for the specified `code`. |
+| **Parameters** | - code - The language ID code.
|
+| **Returns** | - The matching
langaugeID, or nil.
|
+
+### Fields
+
+#### [code](#code)
+| **Signature** | `cp.i18n.localeID.code ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The locale ID code. |
+
+#### [language](#language)
+| **Signature** | `cp.i18n.localeID.language ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The matching `language` details. |
+
+#### [localName](#localname)
+| **Signature** | `cp.i18n.localeID.localName ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The local name in it's own language. |
+
+#### [name](#name)
+| **Signature** | `cp.i18n.localeID.name ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The locale name in English. |
+
+#### [region](#region)
+| **Signature** | `cp.i18n.localeID.region ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The matching `region` details, if appropriate. Will be `nil` if no region was specified in the `code`. |
+
+#### [script](#script)
+| **Signature** | `cp.i18n.localeID.script ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The matching `script` details, if appropriate. Will be `nil` if no script was specified in the `code`. |
+
+### Methods
+
+#### [matches](#matches)
+| **Signature** | `cp.i18n.localeID:matches(otherLocale) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | This compares the `otherLocale` to this locale and returns a number indicating the 'strength' |
+| **Parameters** | - otherLocale - The other locale to compare to.
|
+| **Returns** | - A number from
0 to 3 indicating the match strength.
|
+
diff --git a/api/cp/cp.i18n.region.md b/api/cp/cp.i18n.region.md
new file mode 100644
index 0000000..571c4f3
--- /dev/null
+++ b/api/cp/cp.i18n.region.md
@@ -0,0 +1,28 @@
+# [docs](index.md) » cp.i18n.region
+---
+
+Provides the set of ISO 3166-1 region codes and names.
+The return value can be iterated as a list, or you can find a
+specific region by either its upper-case two-character code (`alpha2`), three-character numeric code (`numeric3`),
+or English name (`name`).
+
+For example:
+
+```lua
+local region = require("cp.i18n.region")
+print(region[1]) -- table for "Afghanistan"
+print(lang.FR) -- table for "France"
+print(lang.France) -- same table for "France"
+```
+
+This will return a table containing the following:
+* `alpha2` - The 2-character region code, upper-case (eg. "AU", "FR").
+* `name` - The name in English (eg. "Australia", "France").
+
+Note: This data was adapted from the [datahub.io list](https://datahub.io/core/country-list)
+released under a Public Domain license.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.i18n.script.md b/api/cp/cp.i18n.script.md
new file mode 100644
index 0000000..3027491
--- /dev/null
+++ b/api/cp/cp.i18n.script.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.i18n.script
+---
+
+Provides the set of ISO 15924 language scripts.
+The return value can be iterated as a list, or you can find a
+specific language by either its four-character code (`alpha4`), three-character numeric code (`numeric3`),
+local name, or English name.
+
+For example:
+
+```lua
+local script = require("cp.i18n.script")
+print(script[1]) -- table for "Adlam" script
+print(script.Hani) -- table for "Han" script (matches `alpha4`)
+print(script["500"]) -- same table for "Han" (matches `numeric3`)
+print(script["Han (Hanzi, Kanji, Hanja)"]) -- same table for "Han" (matches `name`)
+print(script.Han) -- same table for "Han" (matches `pva`).
+```
+
+This will return a table containing the following:
+* `alpha4` - The 4-character script code (eg. "Hani", "Arab").
+* `date` - The `YYYY-MM-DD` date the script was added.
+* `name` - The name in English (eg. "Arabic", "Afaka").
+* `numeric3` - The 3-character language code (eg. "500", "050").
+* `pva` - The Property Value Alias. Not available on all scripts.
+
+Note: This data was adapted from [wooorm's code](https://github.com/wooorm/iso-15924)
+under an [MIT license](https://raw.githubusercontent.com/wooorm/iso-15924/master/LICENSE).
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.idle.md b/api/cp/cp.idle.md
index ad085cb..3b6ce05 100644
--- a/api/cp/cp.idle.md
+++ b/api/cp/cp.idle.md
@@ -5,7 +5,6 @@ This library allows tasks to be queue for execution when the computer has
been idle for a specified amount of time. 'Idle' is defined as no keyboard
or mouse movement.
-
## API Overview
* Functions - API calls offered directly by the extension
* [queue](#queue)
@@ -17,8 +16,8 @@ or mouse movement.
#### [queue](#queue)
| **Signature** | `cp.idle.queue(idleSeconds, actionFn[, retryOnError]) -> nothing` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Adds an action to the idle queue, which will be run after the the computer has been idle |
-| **Parameters** | - * `idleSeconds` - The number of seconds of idle time must have elapsed run the action
- * `actionFn` - The function to execute
- * `retryOnError` - Optional. If set to `true`, the action will try running again if there is an error.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Adds an action to the idle queue, which will be run after the the computer has been idle |
+| **Parameters** | idleSeconds - The number of seconds of idle time must have elapsed run the actionactionFn - The function to executeretryOnError - Optional. If set to true, the action will try running again if there is an error.
|
+| **Returns** | |
diff --git a/api/cp/cp.ids.md b/api/cp/cp.ids.md
index d0cff75..09f3f43 100644
--- a/api/cp/cp.ids.md
+++ b/api/cp/cp.ids.md
@@ -12,6 +12,7 @@ Allows managing values/IDs which can vary between versions.
* [of](#of)
* [ofCurrent](#ofcurrent)
* [previousVersion](#previousversion)
+ * [versions](#versions)
## API Documentation
@@ -20,50 +21,58 @@ Allows managing values/IDs which can vary between versions.
#### [new](#new)
| **Signature** | `cp.ids.new(path[, currentVersionFn]) -> cp.ids` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new `ids` instance with the specified path to the version files and |
-| **Parameters** | - * `path` - The path to the version files.
- * `currentVersionFn` - An optional function that will return the current version as a string or `semver`.
|
-| **Returns** | - * A new `cp.ids` instance.
|
+| **Type** | Function |
+| **Description** | Creates a new `ids` instance with the specified path to the version files and |
+| **Parameters** | path - The path to the version files.currentVersionFn - An optional function that will return the current version as a string or semver.
|
+| **Returns** | |
### Methods
#### [currentVersion](#currentversion)
| **Signature** | `cp.ids:currentVersion() -> semver` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the current version number for the `IDs` library. May be `nil`. |
+| **Type** | Method |
+| **Description** | Returns the current version number for the `IDs` library. May be `nil`. |
| **Parameters** | |
-| **Returns** | - A `semver` with the version number or `nil` if none is available.
|
+| **Returns** | - A
semver with the version number or nil if none is available.
|
#### [load](#load)
| **Signature** | `cp.ids:load([version]) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Loads and caches IDs for the given version. It will search through previous versions, |
+| **Type** | Method |
+| **Description** | Loads and caches IDs for the given version. It will search through previous versions, |
| **Parameters** | - version - The version number you want to load as a string (i.e. "10.4.0"). If not provided, the current version is loaded.
|
-| **Returns** | - A table containing all the IDs
|
+| **Returns** | - A table containing all the IDs
|
#### [of](#of)
-| **Signature** | `cp.ids:of(version, subset) -> table` |
+| **Signature** | `cp.ids:of(version, subset) -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table of the IDs of the specified version and subset. |
+| **Type** | Method |
+| **Description** | Returns a function which can be called to retrieve a specific value for the specified version. |
| **Parameters** | - version - The version number you want to load as a string (i.e. "10.4.0")
- subset - A string containing the subset of data you want to load
|
-| **Returns** | - A table containing the subset of IDs for the selected version. Will never be `nil`.
|
+| **Returns** | - A function that will return the value of the specified
subset ID for the specified version.
|
#### [ofCurrent](#ofcurrent)
-| **Signature** | `cp.ids:ofCurrent(subset) -> table` |
+| **Signature** | `cp.ids:ofCurrent(subset) -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a table of IDs for a current version and specified subset |
+| **Type** | Method |
+| **Description** | Returns a function which can be called with an ID to retrieve a specific value for the current version. |
| **Parameters** | - subset - A string containing the subset of data you want to load
|
-| **Returns** | - A table containing the subset of IDs for the current version
|
+| **Returns** | - A function that will return the value of the specified
subset ID for the current version.
|
#### [previousVersion](#previousversion)
| **Signature** | `cp.ids:previousVersion([version]) -> semver` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the previous version number that has stored IDs. |
-| **Parameters** | - version - The version number you want to load as a string (i.e. "10.4.0") or a `semver`, or `nil` to use the current version.
|
-| **Returns** | - A `semver` instance for the previous version.
|
+| **Type** | Method |
+| **Description** | Returns the previous version number that has stored IDs. |
+| **Parameters** | - version - The version number you want to load as a string (i.e. "10.4.0") or a
semver, or nil to use the current version.
|
+| **Returns** | - A
semver instance for the previous version.
|
+
+#### [versions](#versions)
+| **Signature** | `cp.ids:versions() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table of versions. |
+| **Parameters** | |
+| **Returns** | - A table of
semver objects.
|
diff --git a/api/cp/cp.interpolate.md b/api/cp/cp.interpolate.md
new file mode 100644
index 0000000..c8e1ead
--- /dev/null
+++ b/api/cp/cp.interpolate.md
@@ -0,0 +1,15 @@
+# [docs](index.md) » cp.interpolate
+---
+
+Provides a function that will interpolate values into a string.
+It also augments the standard `string` to override the "mod" (`%`) operator so that
+any string can be easily interpolated, like so:
+
+```lua
+"Hello ${world}" % { world = "Earth" }
+```
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.is.md b/api/cp/cp.is.md
new file mode 100644
index 0000000..72a3092
--- /dev/null
+++ b/api/cp/cp.is.md
@@ -0,0 +1,168 @@
+# [docs](index.md) » cp.is
+---
+
+A simple class that lets you test if a value `is` a particular type.
+Note: for best performance, assign the specific checks you want to use to local functions. Eg:
+
+```lua
+local is_nothing = require("cp.is").nothing
+is_nothing(nil) == true
+```
+
+You can also get functions that negate the functions below by calling `is.nt.XXX(...)` (read: "isn't XXX").
+The individual functions are not documented, but all will work as expected. Eg:
+
+```lua
+is.blank("") == true
+is.nt.blank("") == false
+```
+
+They can also be assigned directly to local values for better performance:
+
+```lua
+local isnt_blank = is.nt.blank
+isnt_blank(nil) == false
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [blank](#blank)
+ * [boolean](#boolean)
+ * [callable](#callable)
+ * [falsey](#falsey)
+ * [fn](#fn)
+ * [instance](#instance)
+ * [list](#list)
+ * [nothing](#nothing)
+ * [number](#number)
+ * [object](#object)
+ * [something](#something)
+ * [string](#string)
+ * [table](#table)
+ * [truthy](#truthy)
+ * [userdata](#userdata)
+
+## API Documentation
+
+### Functions
+
+#### [blank](#blank)
+| **Signature** | `cp.is.blank(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a blank string value - either `nil` or `tostring(value) == ""`. |
+| **Parameters** | - value - the value to check.
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [boolean](#boolean)
+| **Signature** | `cp.is.boolean(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `function`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [callable](#callable)
+| **Signature** | `cp.is.callable(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a callable - either a `function` or a `table` with `__call` in it's metatable hierarchy. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [falsey](#falsey)
+| **Signature** | `cp.is.falsey(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `falsey` value. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [fn](#fn)
+| **Signature** | `cp.is.fn(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `function`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [instance](#instance)
+| **Signature** | `cp.is.instance(value, class) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is an instance of the provided class `table`. It is considered |
+| **Parameters** | - value - the value to check
- class - the class table to check
|
+| **Returns** | true if it is an instance.
|
+
+#### [list](#list)
+| **Signature** | `cp.is.list(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `list`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [nothing](#nothing)
+| **Signature** | `cp.is.nothing(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is `nil`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [number](#number)
+| **Signature** | `cp.is.number(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `number`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [object](#object)
+| **Signature** | `cp.is.object(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `object`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [something](#something)
+| **Signature** | `cp.is.something(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is not `nil`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [string](#string)
+| **Signature** | `cp.is.string(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a string. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [table](#table)
+| **Signature** | `cp.is.table(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `table`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [truthy](#truthy)
+| **Signature** | `cp.is.truthy(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `truthy` value. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
+#### [userdata](#userdata)
+| **Signature** | `cp.is.userdata(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Check if the value is a `userdata` object. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it matches, false if not.
|
+
diff --git a/api/cp/cp.json.md b/api/cp/cp.json.md
new file mode 100644
index 0000000..ceb59a0
--- /dev/null
+++ b/api/cp/cp.json.md
@@ -0,0 +1,60 @@
+# [docs](index.md) » cp.json
+---
+
+A collection of handy JSON tools.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [decode](#decode)
+ * [encode](#encode)
+ * [prop](#prop)
+ * [read](#read)
+ * [write](#write)
+
+## API Documentation
+
+### Functions
+
+#### [decode](#decode)
+| **Signature** | `cp.json.decode(jsonString) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Decodes JSON into a table |
+| **Parameters** | - jsonString - A string containing some JSON data
|
+| **Returns** | - A table representing the supplied JSON data
|
+| **Notes** | - This is useful for retrieving some of the more complex lua table structures as a persistent setting (see
hs.settings)
|
+
+#### [encode](#encode)
+| **Signature** | `cp.json.encode(val[, prettyprint]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Encodes a table as JSON |
+| **Parameters** | - val - A table containing data to be encoded as JSON
- prettyprint - An optional boolean, true to format the JSON for human readability, false to format the JSON for size efficiency. Defaults to false
|
+| **Returns** | - A string containing a JSON representation of the supplied table
|
+| **Notes** | - This is useful for storing some of the more complex lua table structures as a persistent setting (see
hs.settings)
|
+
+#### [prop](#prop)
+| **Signature** | `cp.json.prop(path, folder, filename, defaultValue[, errorCallbackFn]) -> cp.prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a `cp.prop` instance for a JSON file. |
+| **Parameters** | - path - The path to the JSON folder (i.e. "~/Library/Caches")
- folder - The folder containing the JSON file (i.e. "Final Cut Pro")
- filename - The filename of the JSON file (i.e. "Test.json")
- defaultValue - The default value if the JSON file doesn't exist yet.
- errorCallbackFn - An optional function that's triggered if something goes wrong.
|
+| **Returns** | |
+| **Notes** | - The optional
errorCallbackFn should accept one parameter, a string with the error message.
|
+
+#### [read](#read)
+| **Signature** | `cp.json.read(path) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Attempts to read the specified path as a JSON file. |
+| **Parameters** | - path - The JSON file path.
|
+| **Returns** | - The JSON file converted into table, or
nil.
|
+
+#### [write](#write)
+| **Signature** | `cp.json.write(path, data) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Writes data to a JSON file. |
+| **Parameters** | - path - The path to where you want to save the JSON file.
- data - A table containing data to be encoded as JSON.
|
+| **Returns** | true if successfully saved, otherwise false.
|
+
diff --git a/api/cp/cp.just.md b/api/cp/cp.just.md
index 74f5f23..3ad017d 100644
--- a/api/cp/cp.just.md
+++ b/api/cp/cp.just.md
@@ -17,24 +17,24 @@ delayed, up to a finite number of loops.
#### [doUntil](#dountil)
| **Signature** | `cp.just.doUntil(actionFn[, timeout[, frequency]]) -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs an `action` function, looping until the result of the function evaluates to `true` (or a non-nil value). |
-| **Parameters** | - `actionFn` - a fuction which is called on each loop. It should return a 'truthy' value.
- `timeout` - (optional) the number of seconds after which we will give up. Defaults to 1 second.
- `frequency` - (optional) the amount of time between checks. Defaults to 1 millisecond.
|
-| **Returns** | - The last return value of the action function.
|
+| **Type** | Function |
+| **Description** | Performs an `action` function, looping until the result of the function evaluates to `true` (or a non-nil value). |
+| **Parameters** | actionFn - a fuction which is called on each loop. It should return a 'truthy' value.timeout - (optional) the number of seconds after which we will give up. Defaults to 1 second.frequency - (optional) the amount of time in seconds between checks. Defaults to 1 millisecond.
|
+| **Returns** | - The last return value of the action function.
|
#### [doWhile](#dowhile)
| **Signature** | `cp.just.doWhile(actionFn[, timeout[, frequency]]) -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs an 'action' function, looping while the result of the function evaluates to `true`. |
-| **Parameters** | - `actionFn` - a fuction which is called on each loop. It should return a 'truthy' value.
- `timeout` - (optional) the number of seconds after which we will give up. Defaults to 1 second.
- `frequency` - (optional) the time between checks. Defaults to 1 millisecond.
|
-| **Returns** | - The last return value of the action function.
|
+| **Type** | Function |
+| **Description** | Performs an 'action' function, looping while the result of the function evaluates to `true`. |
+| **Parameters** | actionFn - a fuction which is called on each loop. It should return a 'truthy' value.timeout - (optional) the number of seconds after which we will give up. Defaults to 1 second.frequency - (optional) the time between checks. Defaults to 1 millisecond.
|
+| **Returns** | - The last return value of the action function.
|
#### [wait](#wait)
| **Signature** | `cp.just.wait(integer) -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Pauses the application for the specified number of seconds. |
+| **Type** | Function |
+| **Description** | Pauses the application for the specified number of seconds. |
| **Parameters** | - periodInSeconds - the number of seconds to pause for.
|
-| **Returns** | |
+| **Returns** | |
diff --git a/api/cp/cp.lazy.md b/api/cp/cp.lazy.md
new file mode 100644
index 0000000..a719367
--- /dev/null
+++ b/api/cp/cp.lazy.md
@@ -0,0 +1,92 @@
+# [docs](index.md) » cp.lazy
+---
+
+`cp.lazy` is a [middleclass](https://github.com/kikito/middleclass) "mix-in" that allows for
+simple specification of "lazy-loaded" values and functions in class definitions.
+
+Some values and function results in classes are only created once, and may never be created,
+depending on what happens in the class's lifetime.
+
+In these cases, it is useful to have the value created on demand, rather than when the instance
+is initialised.
+
+For methods, this can be done like so with standard Lua code:
+
+```lua
+local class = require "middleclass"
+
+local MyClass = class("MyClass")
+function MyClass:expensiveThing()
+ if self._expensiveThing == nil then
+ self._expensiveThing = ExpensiveThing()
+ end
+ return self._expensiveThing
+end
+
+local myThing = MyClass()
+local myExpensiveThing = myThing:expensiveThing()
+```
+
+For values, it is much trickier, and involves overriding the `metatable.__init` function. Which is
+what this mix-in does for you. It allows you to provide a factory function which will be called just
+once in the object's lifetime, and the result is stored for future calls.
+
+To create a lazy `function` or method, do the following:
+
+```lua
+local class = require "middleclass"
+local lazy = require "cp.lazy"
+
+local MyClass = class("MyClass"):include(lazy)
+function MyClass.lazy.method:expensiveThing()
+ return ExpensiveThing()
+end
+
+local myThing = MyClass()
+local myExpensiveThing = myThing:expensiveThing()
+```
+
+To create a lazy `value`, it's the same, except applied to the `value` table:
+
+```lua
+local class = require "middleclass"
+local lazy = require "cp.lazy"
+
+local MyClass = class("MyClass"):include(lazy)
+function MyClass.lazy.value:expensiveThing()
+ return ExpensiveThing()
+end
+
+local myThing = MyClass()
+local myExpensiveThing = myThing.expensiveThing
+```
+
+Note that it is a 'method' function, so you can use `self` to refer to the specific instance
+that the result will be applied to. The factory function is also passed the key value the
+result is getting applied to as the next parameter, so you can do something like this:
+
+```lua
+function lookup(instance, key)
+ return instance:expensiveLookup(key)
+end
+MyClass.lazy.method.oneThing = lookup
+MyClass.lazy.method.otherThing = lookup
+```
+
+The `expensiveLookup` function would only get called once for each method, caching the result for future calls.
+
+You can also create [cp.prop](cp.prop.md) values:
+
+```lua
+function MyClass.lazy.prop.enabled()
+ return prop.TRUE()
+end
+```
+
+It is very similar to the `value` factory, but the returned `cp.prop` will be automatically bound
+to the new instance and labeled with the key ("enabled" in the example above).
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.localized.md b/api/cp/cp.localized.md
index 6e706eb..7de863b 100644
--- a/api/cp/cp.localized.md
+++ b/api/cp/cp.localized.md
@@ -12,10 +12,11 @@ Helps look up localized names for folders.
### Functions
#### [getLocalizedName](#getlocalizedname)
-| **Signature** | `cp.localized.getLocalizedName(path[, language]) -> string, string` |
+| **Signature** | `cp.localized.getLocalizedName(path[, locale]) -> string, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the localized name for the `path` in the specified `language`. If all else fails, the |
-| **Parameters** | - `path` - The full path to the folder
- `language` - The language to retrieve the name for.
|
-| **Returns** | - The localized name, or `name` if not available.
- The original name, minus `.localized`
|
+| **Type** | Function |
+| **Description** | Returns the localized name for the `path` in the specified `locale`. If all else fails, the |
+| **Parameters** | path - The full path to the folderlocale - The locale to retrieve the name for.
|
+| **Returns** | - The localized name, or
name if not available. - The original name, minus
.localized
|
+| **Notes** | - This function will automatically convert a colon to a dash when localising.
|
diff --git a/api/cp/cp.md b/api/cp/cp.md
index a7d184a..cf87b3a 100644
--- a/api/cp/cp.md
+++ b/api/cp/cp.md
@@ -1,27 +1,50 @@
# [docs](index.md) » cp
---
-Core CommandPost functionality
+Core CommandPost functionality.
## Submodules
+ * [cp.18n](cp.18n.md)
+ * [cp.adobe](cp.adobe.md)
+ * [cp.app](cp.app.md)
* [cp.apple](cp.apple.md)
+ * [cp.battery](cp.battery.md)
* [cp.bench](cp.bench.md)
+ * [cp.blackmagic](cp.blackmagic.md)
* [cp.choices](cp.choices.md)
+ * [cp.collect](cp.collect.md)
* [cp.commands](cp.commands.md)
* [cp.config](cp.config.md)
- * [cp.developer](cp.developer.md)
+ * [cp.console](cp.console.md)
+ * [cp.deferred](cp.deferred.md)
+ * [cp.delegator](cp.delegator.md)
+ * [cp.dev](cp.dev.md)
* [cp.dialog](cp.dialog.md)
+ * [cp.disk](cp.disk.md)
+ * [cp.docs](cp.docs.md)
* [cp.feedback](cp.feedback.md)
+ * [cp.highland2](cp.highland2.md)
+ * [cp.i18n](cp.i18n.md)
* [cp.idle](cp.idle.md)
* [cp.ids](cp.ids.md)
+ * [cp.interpolate](cp.interpolate.md)
+ * [cp.is](cp.is.md)
+ * [cp.json](cp.json.md)
* [cp.just](cp.just.md)
+ * [cp.lazy](cp.lazy.md)
* [cp.localized](cp.localized.md)
+ * [cp.pattern](cp.pattern.md)
* [cp.plist](cp.plist.md)
* [cp.plugins](cp.plugins.md)
* [cp.prop](cp.prop.md)
+ * [cp.protect](cp.protect.md)
+ * [cp.rx](cp.rx.md)
* [cp.sourcewatcher](cp.sourcewatcher.md)
+ * [cp.spec](cp.spec.md)
* [cp.strings](cp.strings.md)
+ * [cp.test](cp.test.md)
* [cp.text](cp.text.md)
+ * [cp.time](cp.time.md)
* [cp.tools](cp.tools.md)
* [cp.ui](cp.ui.md)
* [cp.utf16](cp.utf16.md)
@@ -39,8 +62,8 @@ Core CommandPost functionality
#### [init](#init)
| **Signature** | `cp.init()` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Initialise CommandPost |
+| **Type** | Function |
+| **Description** | Initialise CommandPost |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
diff --git a/api/cp/cp.pattern.md b/api/cp/cp.pattern.md
new file mode 100644
index 0000000..9a49640
--- /dev/null
+++ b/api/cp/cp.pattern.md
@@ -0,0 +1,22 @@
+# [docs](index.md) » cp.pattern
+---
+
+Contains pattern matching utility functions.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [doesMatch](#doesmatch)
+
+## API Documentation
+
+### Functions
+
+#### [doesMatch](#doesmatch)
+| **Signature** | `cp.pattern.doesMatch(value, searchString[, options]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided value matches the search string, given the provided options. |
+| **Parameters** | - value - The value to check.
- searchString - The string values to match.
- options - The table of options.
|
+| **Returns** | true if the value matches the search string
|
+| **Notes** | - Supported options:
- caseSensitive - If
true, the case in the search string must match the value. - exact - If
true, the search string must match exactly somewhere within the value. If false, words separated by spaces can appear anywhere in the value. - wholeWords - If
true, either the whole string (if exact is true) or each word (if exact is false) must match at word boundaries.
|
+
diff --git a/api/cp/cp.plist.archiver.md b/api/cp/cp.plist.archiver.md
index 4fb39eb..5182ef6 100644
--- a/api/cp/cp.plist.archiver.md
+++ b/api/cp/cp.plist.archiver.md
@@ -15,18 +15,18 @@ Supports 'defrosting' a table which is made up from an 'NSKeyArchiver' record.
#### [unarchive](#unarchive)
| **Signature** | `cp.plist.archiver.unarchive(archive, defrostFn) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Unarchives a LUA table which was archived into a plist using the NSKeyedArchiver. |
-| **Parameters** | - `archive` - the table containing the archive plist as a table
- `defrostFn` - (optional) a function which will be passed an object with a '$class' entry
|
-| **Returns** | - The unarchived plist table
|
-| **Notes** | - A 'defrost' function can be provided, which will be called whenever a table with a '$class'
- structure is present. It will receive the table and the classname and should either return a modified value
- if the class was handled, or `nil` if it was unable to handle the class. Eg:
|
+| **Type** | Function |
+| **Description** | Unarchives a LUA table which was archived into a plist using the NSKeyedArchiver. |
+| **Parameters** | archive - the table containing the archive plist as a tabledefrostFn - (optional) a function which will be passed an object with a '$class' entry
|
+| **Returns** | - The unarchived plist table
|
+| **Notes** | - A 'defrost' function can be provided, which will be called whenever a table with a '$class' structure is present. It will receive the table and the classname and should either return a modified value if the class was handled, or
nil if it was unable to handle the class. Eg:
|
#### [unarchiveFile](#unarchivefile)
| **Signature** | `cp.plist.archiver.unarchiveFile(filename, defrostFn) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Unarchives a plist file which was archived into a plist using the NSKeyedArchiver. |
-| **Parameters** | - `filename` - the file containing the archive plist
- `defrostFn` - (optional) a function which will be passed an object with a '$class' entry
|
-| **Returns** | |
-| **Notes** | - A 'defrost' function can be provided, which will be called whenever a table with a '$class'
- structure is present. It will receive the table and the classname and should either return a modified value
- if the class was handled, or `nil` if it was unable to handle the class. Eg:
|
+| **Type** | Function |
+| **Description** | Unarchives a plist file which was archived into a plist using the NSKeyedArchiver. |
+| **Parameters** | filename - the file containing the archive plistdefrostFn - (optional) a function which will be passed an object with a '$class' entry
|
+| **Returns** | |
+| **Notes** | - A 'defrost' function can be provided, which will be called whenever a table with a '$class' structure is present. It will receive the table and the classname and should either return a modified value if the class was handled, or
nil if it was unable to handle the class. Eg:
|
diff --git a/api/cp/cp.plist.md b/api/cp/cp.plist.md
index f8fd036..c97bafa 100644
--- a/api/cp/cp.plist.md
+++ b/api/cp/cp.plist.md
@@ -5,6 +5,7 @@ Reads & Writes plist data.
## Submodules
* [cp.plist.archiver](cp.plist.archiver.md)
+ * [cp.plist.plistParser](cp.plist.plistParser.md)
## API Overview
* Functions - API calls offered directly by the extension
@@ -15,64 +16,73 @@ Reads & Writes plist data.
* [fileToTable](#filetotable)
* [isBinaryPlist](#isbinaryplist)
* [xmlFileToTable](#xmlfiletotable)
+ * [xmlToTable](#xmltotable)
## API Documentation
### Functions
#### [base64ToTable](#base64totable)
-| **Signature** | `cp.plist.base64ToTable(base64Data) -> table | nil, errorMessage` |
+| **Signature** | `cp.plist.base64ToTable(base64Data) -> table | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Converts base64 encoded Property List string into a Table. |
+| **Type** | Function |
+| **Description** | Converts base64 encoded Property List string into a Table. |
| **Parameters** | - base64Data - Binary data encoded in base64 as a string
|
-| **Returns** | - A table of the plist data
- A error message as string if an error occurs
|
+| **Returns** | - A table of the plist data
- A error message as string if an error occurs
|
#### [binaryFileToTable](#binaryfiletotable)
-| **Signature** | `cp.plist.binaryFileToTable(plistFileName) -> table | nil` |
+| **Signature** | `cp.plist.binaryFileToTable(plistFileName) -> table | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Converts the data from a Binary File into a LUA Table. |
-| **Parameters** | - plistFileName - Path & Filename of the Binary File
|
-| **Returns** | - data - A table of plist data, or `nil` if there was a problem.
- err - The error message, or `nil` if there were no problems.
|
+| **Type** | Function |
+| **Description** | Converts the data from a Binary File into a LUA Table. |
+| **Parameters** | - plistFileName - Path & Filename of the Binary File
|
+| **Returns** | - data - A table of plist data, or
nil if there was a problem. - err - The error message, or
nil if there were no problems.
|
#### [binaryFileToXML](#binaryfiletoxml)
-| **Signature** | `cp.plist.binaryFileToXML(plistFileName) -> string | nil` |
+| **Signature** | `cp.plist.binaryFileToXML(plistFileName) -> string | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Converts the data from a Binary plist File into XML as a string. |
-| **Parameters** | - plistFileName - Path & Filename of the Binary File
|
-| **Returns** | - data - A string of XML data
- err - The error message, or `nil` if there were no problems.
|
+| **Type** | Function |
+| **Description** | Converts the data from a Binary plist File into XML as a string. |
+| **Parameters** | - plistFileName - Path & Filename of the Binary File
|
+| **Returns** | - data - A string of XML data
- err - The error message, or
nil if there were no problems.
|
#### [binaryToTable](#binarytotable)
-| **Signature** | `cp.plist.binaryToTable(binaryData) -> table | nil` |
+| **Signature** | `cp.plist.binaryToTable(binaryData) -> table | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Converts Binary Data into a LUA Table. |
-| **Parameters** | |
-| **Returns** | - data - A string of XML data
- err - The error message, or `nil` if there were no problems.
|
+| **Type** | Function |
+| **Description** | Converts Binary Data into a LUA Table. |
+| **Parameters** | |
+| **Returns** | - data - A string of XML data
- err - The error message, or
nil if there were no problems.
|
#### [fileToTable](#filetotable)
-| **Signature** | `cp.plist.fileToTable(plistFileName) -> table | nil` |
+| **Signature** | `cp.plist.fileToTable(plistFileName) -> table | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Converts plist data from a binary or XML file into a LUA Table. |
-| **Parameters** | - plistFileName - Path & Filename of the XML File
|
-| **Returns** | - data - A table of plist data, or `nil` if there was a problem.
- err - The error message, or `nil` if there were no problems.
|
+| **Type** | Function |
+| **Description** | Converts plist data from a binary or XML file into a LUA Table. |
+| **Parameters** | - plistFileName - Path & Filename of the XML File
|
+| **Returns** | - data - A table of plist data, or
nil if there was a problem. - err - The error message, or
nil if there were no problems.
|
#### [isBinaryPlist](#isbinaryplist)
| **Signature** | `cp.plist.isBinaryPlist(plistList) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns true if plistList is a binary plist file otherwise false |
+| **Type** | Function |
+| **Description** | Returns true if plistList is a binary plist file otherwise false |
| **Parameters** | - plistList - Path to the file
|
-| **Returns** | |
+| **Returns** | |
#### [xmlFileToTable](#xmlfiletotable)
-| **Signature** | `cp.plist.xmlFileToTable(plistFileName) -> table | nil` |
+| **Signature** | `cp.plist.xmlFileToTable(plistFileName) -> table | nil, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Converts XML data from a file into a LUA Table. |
-| **Parameters** | - plistFileName - Path & Filename of the XML File
|
-| **Returns** | - data - A table of plist data, or `nil` if there was a problem.
- err - The error message, or `nil` if there were no problems.
|
+| **Type** | Function |
+| **Description** | Converts XML data from a file into a LUA Table. |
+| **Parameters** | - plistFileName - Path & Filename of the XML File
|
+| **Returns** | - data - A table of plist data, or
nil if there was a problem. - err - The error message, or
nil if there were no problems.
|
+
+#### [xmlToTable](#xmltotable)
+| **Signature** | `cp.plist.xmlToTable(plistXml) -> table | nil, string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts an XML plist string into a LUA Table. |
+| **Parameters** | - plistXml - The XML string
|
+| **Returns** | - data - A table of plist data, or
nil if there was a problem. - err - The error message, or
nil if there were no problems.
|
diff --git a/api/cp/cp.plist.plistParser.md b/api/cp/cp.plist.plistParser.md
new file mode 100644
index 0000000..3bd28e9
--- /dev/null
+++ b/api/cp/cp.plist.plistParser.md
@@ -0,0 +1,24 @@
+# [docs](index.md) » cp.plist.plistParser
+---
+
+plistParser (https://codea.io/talk/discussion/1269/code-plist-parser)
+version 1.01
+
+based on an XML parser by Roberto Ierusalimschy at:
+lua-users.org/wiki/LuaXml
+
+Takes a string-ified .plist file as input, and outputs
+a table. Nested dictionaries and arrays are parsed into
+subtables. Table structure will match the structure of
+the .plist file
+
+Usage:
+```lua
+local plistStr =
+local plistTable = plistParse(plistStr)
+```
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.plugins.env.md b/api/cp/cp.plugins.env.md
index 877fa62..ef505f7 100644
--- a/api/cp/cp.plugins.env.md
+++ b/api/cp/cp.plugins.env.md
@@ -20,50 +20,50 @@ Provides access to resources in the plugin environment. In generally, this will
#### [new](#new)
| **Signature** | `cp.plugins.env.new(rootPath) -> cp.plugins.env` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new `env` pointing at the specified root folder path. |
-| **Parameters** | - * `rootPath` the path to the plugin's root folder.
|
-| **Returns** | - * The new `env` instance.
|
+| **Type** | Constructor |
+| **Description** | Creates a new `env` pointing at the specified root folder path. |
+| **Parameters** | rootPath the path to the plugin's root folder.
|
+| **Returns** | |
### Methods
#### [compileTemplate](#compiletemplate)
| **Signature** | `cp.plugins.env:compileTemplate(view[, layout]) -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Compiles a Resty Template within the context of the plugin. The `view` may be a resource path pointing at a template file in the plugin, or may be raw template markup. The `layout` is an optional path/template for a layout template. See the [Resty Template](https://github.com/bungle/lua-resty-template) documentation for details. |
-| **Parameters** | - * `view` - The local path inside the plugin to the template file, or raw template markup.
- * `layout` - The local path inside the plugin to the layout file.
|
-| **Returns** | - * A function which will render the template.
|
+| **Type** | Method |
+| **Description** | Compiles a Resty Template within the context of the plugin. The `view` may be a resource path pointing at a template file in the plugin, or may be raw template markup. The `layout` is an optional path/template for a layout template. See the [Resty Template](https://github.com/bungle/lua-resty-template) documentation for details. |
+| **Parameters** | view - The local path inside the plugin to the template file, or raw template markup.layout - The local path inside the plugin to the layout file.
|
+| **Returns** | - A function which will render the template.
|
#### [pathToAbsolute](#pathtoabsolute)
| **Signature** | `cp.plugins.env:pathToAbsolute(resourcePath) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the absolute path to the file referred to by the relative resource path. If an image is stored as `images/my.jpg` in the plugin, the resource path will be `"images/my.jpg"`. The result will be the full path to that file. If the file cannot be found in the plugin, it will look in the `cp/resources/assets` folder for globally-shared resources. |
-| **Parameters** | - * `resourcePath` - The local path to the resource inside the plugin.
|
-| **Returns** | - * The absolute path to the resource, or `nil` if it does not exist.
|
+| **Type** | Method |
+| **Description** | Returns the absolute path to the file referred to by the relative resource path. If an image is stored as `images/my.jpg` in the plugin, the resource path will be `"images/my.jpg"`. The result will be the full path to that file. If the file cannot be found in the plugin, it will look in the `cp/resources/assets` folder for globally-shared resources. |
+| **Parameters** | resourcePath - The local path to the resource inside the plugin.
|
+| **Returns** | - The absolute path to the resource, or
nil if it does not exist.
|
#### [pathToURL](#pathtourl)
| **Signature** | `cp.plugins.env:pathToURL(resourcePath) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns an absolute `file://` URL to the file referred to by the relative resource path. If an image is stored as `images/my.jpg` in the plugin, the resource path will be `"images/my.jpg"`. The result will be a URL to that file. If the file cannot be found in the plugin, it will look in the `cp/resources/assets` folder for globally-shared resources. |
-| **Parameters** | - * `resourcePath` - The local path to the resource inside the plugin.
|
-| **Returns** | - * The absolute URL to the resource, or `nil` if it does not exist.
|
+| **Type** | Method |
+| **Description** | Returns an absolute `file://` URL to the file referred to by the relative resource path. If an image is stored as `images/my.jpg` in the plugin, the resource path will be `"images/my.jpg"`. The result will be a URL to that file. If the file cannot be found in the plugin, it will look in the `cp/resources/assets` folder for globally-shared resources. |
+| **Parameters** | resourcePath - The local path to the resource inside the plugin.
|
+| **Returns** | - The absolute URL to the resource, or
nil if it does not exist.
|
#### [readResource](#readresource)
| **Signature** | `cp.plugins.env:readResource(resourcePath) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Reads the contents of the resource at the specified resource path. This is returned as a string of data (which may or may not be an actual readable string, depending on the source content). |
-| **Parameters** | - * `resourcePath` - The local path to the resource inside the plugin.
|
-| **Returns** | - * The contents of the resouce, or `nil` if the file does not exist.
|
+| **Type** | Method |
+| **Description** | Reads the contents of the resource at the specified resource path. This is returned as a string of data (which may or may not be an actual readable string, depending on the source content). |
+| **Parameters** | resourcePath - The local path to the resource inside the plugin.
|
+| **Returns** | - The contents of the resouce, or
nil if the file does not exist.
|
#### [renderTemplate](#rendertemplate)
| **Signature** | `cp.plugins.env:renderTemplate(view[, model[, layout]]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Renders a Resty Template within the context of the plugin. The `view` may be a resource path pointing at a template file in the plugin, or may be raw template markup. The `layout` is an optional path/template for a layout template. See the [Resty Template](https://github.com/bungle/lua-resty-template) documentation for details. |
-| **Parameters** | - * `view` - The local path inside the plugin to the template file, or raw template markup.
- * `model` - The model which provides variables/functions/etc to the template.
- * `layout` - The local path inside the plugin to the layout file.
|
-| **Returns** | - * A function which will render the template.
|
+| **Type** | Method |
+| **Description** | Renders a Resty Template within the context of the plugin. The `view` may be a resource path pointing at a template file in the plugin, or may be raw template markup. The `layout` is an optional path/template for a layout template. See the [Resty Template](https://github.com/bungle/lua-resty-template) documentation for details. |
+| **Parameters** | view - The local path inside the plugin to the template file, or raw template markup.model - The model which provides variables/functions/etc to the template.layout - The local path inside the plugin to the layout file.
|
+| **Returns** | - A function which will render the template.
|
diff --git a/api/cp/cp.plugins.md b/api/cp/cp.plugins.md
index c16211b..510cc34 100644
--- a/api/cp/cp.plugins.md
+++ b/api/cp/cp.plugins.md
@@ -80,8 +80,8 @@ It is defined like so:
```lua
plugin.dependencies = {
- "cp.plugins.myplugin",
- ["cp.plugins.otherplugin"] = "otherPlugin"
+ "cp.plugins.myplugin",
+ ["cp.plugins.otherplugin"] = "otherPlugin"
}
As you can see, there are two ways of declaring a dependency. The first is with just the plugin ID, the second has an alias.
@@ -100,7 +100,6 @@ A plugin will only have its `init` function called after its dependencies have s
### `function plugin.init(dependencies[, environment]) -> module`
This function is basically required. It will be executed when the plugin is initialised. The `dependencies` parameter is a table containing the list of dependencies that the plugin defined via the `dependencies` property. The `environment` provides access to resources such as images, HTML files, or other lua modules that are bundled with the plugin. See `Simple vs Complex Plugins` below.
-```
As you may have noted, there are two ways to specify a plugin is required. Either by simply specifying it as an 'array' item (the first example) or as a key/value (the second example). Doing the later allows you to specify an alias for the dependency, which can be used in the `init(...)` function, like so:
@@ -108,17 +107,17 @@ As you may have noted, there are two ways to specify a plugin is required. Eithe
local plugin = {}
plugin.dependencies = {
- "cp.plugins.myplugin",
- ["cp.plugins.otherplugin"] = "otherplugin"
+ "cp.plugins.myplugin",
+ ["cp.plugins.otherplugin"] = "otherplugin"
}
function plugin.init(dependencies)
- local myplugin = dependencies["cp.plugins.myplugin"]
- local otherplugin = dependencies.otherplugin
+ local myplugin = dependencies["cp.plugins.myplugin"]
+ local otherplugin = dependencies.otherplugin
- -- do other stuff with the dependencies
+ -- do other stuff with the dependencies
- return myinstance
+ return myinstance
end
return plugin
@@ -149,13 +148,20 @@ These modules will not be accessible to other plugins or to the main application
## Submodules
* [cp.plugins.env](cp.plugins.env.md)
+ * [cp.plugins.plugin](cp.plugins.plugin.md)
## API Overview
+* Constants - Useful values which cannot be changed
+ * [CACHE](#cache)
+ * [SETTINGS_DISABLED](#settings_disabled)
+* Variables - Configurable values
+ * [IDS](#ids)
* Functions - API calls offered directly by the extension
* [addDependent](#adddependent)
* [disable](#disable)
* [enable](#enable)
* [getDependents](#getdependents)
+ * [getPlugin](#getplugin)
* [getPluginIds](#getpluginids)
* [getPluginModule](#getpluginmodule)
* [getPlugins](#getplugins)
@@ -173,149 +179,179 @@ These modules will not be accessible to other plugins or to the main application
## API Documentation
+### Constants
+
+#### [CACHE](#cache)
+| **Signature** | `cp.plugins.CACHE -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Plugin Cache |
+
+#### [SETTINGS_DISABLED](#settings_disabled)
+| **Signature** | `cp.plugins.SETTINGS_DISABLED -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Plugin Disabled Code |
+
+### Variables
+
+#### [IDS](#ids)
+| **Signature** | `cp.plugins.IDS -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Variable |
+| **Description** | Plugin Status Codes |
+
### Functions
#### [addDependent](#adddependent)
-| **Signature** | `cp.plugins.addDependent(id) -> nothing` |
+| **Signature** | `cp.plugins.addDependent(id) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Adds the `dependentPlugin` as a dependent of the plugin with the specified id. |
-| **Parameters** | - `id` - The plugin package ID.
- `dependentPlugin` - The plugin which is a dependent
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Adds the `dependentPlugin` as a dependent of the plugin with the specified id. |
+| **Parameters** | id - The plugin package ID.dependentPlugin - The plugin which is a dependent
|
+| **Returns** | |
#### [disable](#disable)
-| **Signature** | `cp.plugins.disable(id) -> nothing` |
+| **Signature** | `cp.plugins.disable(...) -> boolean, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Disabled the plugin with the specified ID and reloads the application. |
-| **Parameters** | - `id` - The plugin package ID.
|
-| **Returns** | - `true` if the plugin was disabled, or `false` if it could not be disabled.
|
+| **Type** | Function |
+| **Description** | Disabled the plugin(s) with the specified IDs and reloads the application. |
+| **Parameters** | ... - The list of plugin package IDs.
|
+| **Returns** | true if the plugin was disabled, or false if any of the plugins failed.- If disabling failed, the first ID that failed is returned as the second value.
|
#### [enable](#enable)
-| **Signature** | `cp.plugins.enable(id) -> nothing` |
+| **Signature** | `cp.plugins.enable(...) -> boolean, string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Enables the plugin with the specified ID, and reloads the application. |
-| **Parameters** | - `id` - The plugin package ID.
|
-| **Returns** | - `true` if the plugin had been disabled and is now enabled.
|
+| **Type** | Function |
+| **Description** | Enables the plugin with the specified ID, and reloads the application. |
+| **Parameters** | ... - The plugin package ID.
|
+| **Returns** | true if the plugins had been disabled and are now enabled.- If enabling failed, the plugin ID which could not be enabled is returned as the second value.
|
#### [getDependents](#getdependents)
| **Signature** | `cp.plugins.getDependents(pluginId)` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Retrieves the list of dependent plugins for the specified plugin id. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Retrieves the list of dependent plugins for the specified plugin id. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getPlugin](#getplugin)
+| **Signature** | `cp.plugins.getPlugin(id) -> plugin` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Retrieves a plugin from the cache by ID. |
+| **Parameters** | - id - The ID of the plugin you want to get
|
+| **Returns** | |
#### [getPluginIds](#getpluginids)
| **Signature** | `cp.plugins.getPluginIds() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Retrieves an array of the loaded plugin IDs. |
+| **Type** | Function |
+| **Description** | Retrieves an array of the loaded plugin IDs. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getPluginModule](#getpluginmodule)
| **Signature** | `cp.plugins.getPluginModule(id) -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns an initialised plugin result with the specified `id`. |
-| **Parameters** | - `id` - The plugin package ID.
|
-| **Returns** | - the result of the plugin's `init(...)` function call.
|
+| **Type** | Function |
+| **Description** | Returns an initialised plugin result with the specified `id`. |
+| **Parameters** | id - The plugin package ID.
|
+| **Returns** | - the result of the plugin's
init(...) function call.
|
#### [getPlugins](#getplugins)
| **Signature** | `cp.plugins.getPlugins() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Retrieves an array of details about the set of loaded plugins. |
+| **Type** | Function |
+| **Description** | Retrieves an array of details about the set of loaded plugins. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [init](#init)
| **Signature** | `cp.plugins.init(paths) -> cp.plugins` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Initialises the plugin loader to look in the specified file paths for plugins. |
-| **Parameters** | - `paths` - An array of paths to search for plugins in.
|
-| **Returns** | - `cp.plugins` - The module.
|
+| **Type** | Function |
+| **Description** | Initialises the plugin loader to look in the specified file paths for plugins. |
+| **Parameters** | paths - An array of paths to search for plugins in.
|
+| **Returns** | |
#### [initPlugin](#initplugin)
| **Signature** | `cp.plugins.initPlugin(id) -> module` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Initialises a specific plugin with the specified path. |
-| **Parameters** | - `id` - The LUA package to look in
|
-| **Returns** | - the result of the plugin's `init(...)` function call.
|
+| **Type** | Function |
+| **Description** | Initialises a specific plugin with the specified path. |
+| **Parameters** | id - The LUA package to look in
|
+| **Returns** | - the result of the plugin's
init(...) function call.
|
#### [initPlugins](#initplugins)
-| **Signature** | `cp.plugins.initPlugins() -> nothing` |
+| **Signature** | `cp.plugins.initPlugins() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Initialises all registered plugins. |
+| **Type** | Function |
+| **Description** | Initialises all registered plugins. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [isDisabled](#isdisabled)
| **Signature** | `cp.plugins.isDisabled(id) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the specified plugin ID is disabled. |
-| **Parameters** | - `id` - The plugin package ID.
|
-| **Returns** | - `true` if the plugin is disabled.
|
+| **Type** | Function |
+| **Description** | Checks if the specified plugin ID is disabled. |
+| **Parameters** | id - The plugin package ID.
|
+| **Returns** | true if the plugin is disabled.
|
#### [loadComplexPlugin](#loadcomplexplugin)
| **Signature** | `cp.plugins.loadComplexPlugin(path) -> plugin` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Loads a 'complex' plugin, which is a folder containing an `init.lua` file. |
-| **Parameters** | - `path` - The plugin package ID.
|
-| **Returns** | - `true` if the plugin ias successfully post-initialised.
|
+| **Type** | Function |
+| **Description** | Loads a 'complex' plugin, which is a folder containing an `init.lua` file. |
+| **Parameters** | path - The plugin package ID.
|
+| **Returns** | true if the plugin is successfully post-initialised.
|
#### [loadDependencies](#loaddependencies)
| **Signature** | `cp.plugins.loadDependencies(plugin) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Loads the list of dependencies for the provided plugin. |
-| **Parameters** | - `plugin` - The plugin object
|
-| **Returns** | - an array of the dependencies required by the plugin, or `nil` if any could not be loaded.
|
+| **Type** | Function |
+| **Description** | Loads the list of dependencies for the provided plugin. |
+| **Parameters** | plugin - The plugin object
|
+| **Returns** | - an array of the dependencies required by the plugin, or
nil if any could not be loaded.
|
#### [loadSimplePlugin](#loadsimpleplugin)
| **Signature** | `cp.plugins.loadSimplePlugin(id) -> plugin` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Loads a 'simple' plugin, where it is defined by a single LUA script. |
-| **Parameters** | - `path` - The plugin package ID.
|
-| **Returns** | - `true` if the plugin ias successfully post-initialised.
|
+| **Type** | Function |
+| **Description** | Loads a 'simple' plugin, where it is defined by a single LUA script. |
+| **Parameters** | path - The plugin package ID.
|
+| **Returns** | true if the plugin is successfully post-initialised.
|
#### [postInitPlugin](#postinitplugin)
| **Signature** | `cp.plugins.postInitPlugin(id) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Runs any post-initialisation functions declared for the specified plugin ID. |
-| **Parameters** | - `id` - The plugin package ID.
|
-| **Returns** | - `true` if the plugin ias successfully post-initialised.
|
+| **Type** | Function |
+| **Description** | Runs any post-initialisation functions declared for the specified plugin ID. |
+| **Parameters** | id - The plugin package ID.
|
+| **Returns** | true if the plugin is successfully post-initialised.
|
#### [postInitPlugins](#postinitplugins)
-| **Signature** | `cp.plugins.postInitPlugins() -> nothing` |
+| **Signature** | `cp.plugins.postInitPlugins() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs any post-initialisation required for plugins. |
+| **Type** | Function |
+| **Description** | Performs any post-initialisation required for plugins. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [scanDirectory](#scandirectory)
| **Signature** | `cp.plugins.scanDirectory(directoryPath) -> cp.plugins` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Scans the specified directory and loads any plugins in the directory, |
-| **Parameters** | - `directoryPath` - The path to the directory to scan.
|
-| **Returns** | - boolean - `true` if the path was loaded successfully, false if there were any issues.
|
+| **Type** | Function |
+| **Description** | Scans the specified directory and loads any plugins in the directory, |
+| **Parameters** | directoryPath - The path to the directory to scan.
|
+| **Returns** | - boolean -
true if the path was loaded successfully, false if there were any issues.
|
#### [watchPluginPaths](#watchpluginpaths)
-| **Signature** | `cp.plugins.watchPluginPaths() -> nothing` |
+| **Signature** | `cp.plugins.watchPluginPaths() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Watches the plugin paths for changes and reloads the application if any change. |
+| **Type** | Function |
+| **Description** | Watches the plugin paths for changes and reloads the application if any change. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
diff --git a/api/cp/cp.plugins.plugin.md b/api/cp/cp.plugins.plugin.md
new file mode 100644
index 0000000..4375276
--- /dev/null
+++ b/api/cp/cp.plugins.plugin.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.plugins.plugin
+---
+
+CommandPost Plugin.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.prop.md b/api/cp/cp.prop.md
index 3bf7c0c..72a0869 100644
--- a/api/cp/cp.prop.md
+++ b/api/cp/cp.prop.md
@@ -3,37 +3,48 @@
This is a utility library for helping keep track of single-value property states. Each property provides access to a single value. Must be readable, but may be read-only. It works by creating a table which has a `get` and (optionally) a `set` function which are called when changing the state.
-## Features
+
+
+## Features:
### 1. Callable
A `prop` can be called like a function once created. Eg:
```lua
local value = true
local propValue = prop.new(function() return value end, function(newValue) value = newValue end)
-propValue() == true -- `value` is still true
-propValue(false) == false -- now `value` is false
+propValue() == true -- `value` is still true
+propValue(false) == false -- now `value` is false
```
### 2. Togglable
A `prop` comes with toggling built in - as long as the it has a `set` function. Continuing from the last example:
```lua
-propValue:toggle() -- `value` went from `false` to `true`.
+propValue:toggle() -- `value` went from `false` to `true`.
```
-**Note:** Toggling a non-boolean value will flip it to `nil` and a subsequent toggle will make it `true`. See the [toggle method](#toggle) for more details.
+ **Note:** Toggling a non-boolean value will flip it to `nil` and a subsequent toggle will make it `true`. See the [toggle method](#toggle) for more details.
### 3. Watchable
Interested parties can 'watch' the `prop` value to be notified of changes. Again, continuing on:
```lua
-propValue:watch(function(newValue) print "New Value: "...newValue) end) -- prints "New Value: true" immediately
-propValue(false) -- prints "New Value: false"
+propValue:watch(function(newValue) print "New Value: "...newValue) end) -- prints "New Value: true" immediately
+propValue(false) -- prints "New Value: false"
```
This will also work on [AND](#and) and [OR][#or] properties. Any changes from component properties will trigger a notification.
-### 4. Combinable
+### 4. Observable
+Similarly, you can 'observe' a prop as a `cp.rx.Observer` by calling the `observe` method:
+
+```lua
+propValue:toObservable():subscribe(function(value) print(tostring(value) end))
+```
+
+These will never emit an `onError` or `onComplete` message, just `onNext` with either `nil` or the current value as it changes.
+
+### 5. Combinable
We can combine or modify properties with AND/OR and NOT operations. The resulting values will be a live combination of the underlying `prop` values. They can also be watched, and will be notified when the underlying `prop` values change. For example:
```lua
@@ -68,7 +79,7 @@ happy:toggle()
You can also use non-boolean properties. Any non-`nil` value is considered to be `true`.
-## 5. Immutable
+### 6. Immutable
If appropriate, a `prop` may be immutable. Any `prop` with no `set` function defined is immutable. Examples are the `prop.AND` and `prop.OR` instances, since modifying combinations of values doesn't really make sense.
Additionally, an immutable wrapper can be made from any `prop` value via either `prop.IMMUTABLE(...)` or calling the `myValue:IMMUTABLE()` method.
@@ -79,12 +90,12 @@ For example:
```lua
local isImmutable = propValue:IMMUTABLE()
-isImmutable:toggle() -- results in an `error` being thrown
+isImmutable:toggle() -- results in an `error` being thrown
isImmutable:watch(function(newValue) print "isImmutable changed to "..newValue end)
-propValue:toggle() -- prints "isImmutable changed to false"
+propValue:toggle() -- prints "isImmutable changed to false"
```
-## 6. Bindable
+### 7. Bindable
A property can be bound to an 'owning' table. This table will be passed into the `get` and `set` functions for the property if present. This is mostly useful if your property depends on internal instance values of a table. For example, you might want to make a property work as a method instead of a function:
```lua
@@ -98,18 +109,36 @@ owner:isMethod() -- error!
To use a `prop` as a method, you need to `attach` it to the owning table, like so:
```lua
-local owner = {
- _value = true
-}
+local owner = { _value = true }
owner.isMethod = prop(function(self) return self._value end, function(value, self) self._value = value end):bind(owner)
-owner:isMethod() -- success!
-owner.isMethod() -- also works - will still pass in the bound owner.
-owner.isMethod:owner() == owner -- is true~
+owner:isMethod() -- success!
+owner.isMethod() -- also works - will still pass in the bound owner.
+owner.isMethod:owner() == owner -- is true~
+```
+
+You can also use the [prop.bind](#bind) function to bind multple properties at once:
+
+```lua
+local owner = { _value = true }
+prop.bind(o) {
+ isMethod = prop(function(self) return self._value end)
+}
+owner:isMethod() -- success!
+```
+
+The [prop.extend](#extend) function will also bind any `cp.prop` values it finds:
+
+```lua
+local owner = prop.extend({
+ _value = true,
+ isMethod = prop(function(self) return self._value end),
+})
+owner:isMethod() -- success!
```
The bound `owner` is passed in as the last parameter of the `get` and `set` functions.
-## 7. Extendable
+### 8. Extendable
A common use case is using metatables to provide shared fields and methods across multiple instances. A typical example might be:
```lua
@@ -138,8 +167,8 @@ person.name = prop(function(self) return self._name end, function(value, self) s
Unfortunately, this doesn't work as expected:
```lua
-johnDoe:name() -- Throws an error because `person` is the owner, not `johnDoe`.
-johnDoe.name() == nil -- Works, but will return `nil` because "John Doe" is applied to the new table, not `person`
+johnDoe:name() -- Throws an error because `person` is the owner, not `johnDoe`.
+johnDoe.name() == nil -- Works, but will return `nil` because "John Doe" is applied to the new table, not `person`
```
The fix is to use `prop.extend` when creating the new person. Rewrite `person.new` like so:
@@ -160,9 +189,14 @@ johnDoe.name() == "John Doe"
The `prop.extend` function will set the `source` table as a metatable of the `target`, as well as binding any bound props that are in the `source` to `target`.
-# Tables
+## Tables
-Because tables are copied by reference rather than by value, changes made inside a table will not necessarily trigger an update when setting a value with an updated table value. By default, tables are simply passed in and out without modification. You can nominate for a property to make copies of tables (not userdata) when getting or setting, which effectively isolates the value being stored from outside modification. This can be done with the [deepTable](#deepTable) and[shallowTable](#shallowTable) methods. Below is an example of them in action:
+Because tables are copied by reference rather than by value, changes made inside a table will not necessarily
+trigger an update when setting a value with an updated table value. By default, tables are simply passed in
+and out without modification. You can nominate for a property to make copies of tables (not userdata) when
+getting or setting, which effectively isolates the value being stored from outside modification. This can be
+done with the [deepTable](#deepTable) and [shallowTable](#shallowTable) methods. Below is an example of them
+in action:
```lua
local value = { a = 1, b = { c = 1 } }
@@ -176,70 +210,74 @@ deepProp:watch(function(v) print("deep: a = " .. v.a ..", b.c = ".. v.b.c ) end)
shallowProp:watch(function(v) print("shallow: a = " .. v.a ..", b.c = ".. v.b.c ) end)
-- change the original table:
-value.a = 2
-value.b.c = 2
+value.a = 2
+value.b.c = 2
-valueProp().a == 2 -- modified
-valueProp().b.c == 2 -- modified
-shallowProp().a == 1 -- top level is copied
-shallowProp().b.c == 2 -- child tables are referenced
-deepProp().a == 1 -- top level is copied
-deepProp().b.c == 1 -- child tables are copied as well
+valueProp().a == 2 -- modified
+valueProp().b.c == 2 -- modified
+shallowProp().a == 1 -- top level is copied
+shallowProp().b.c == 2 -- child tables are referenced
+deepProp().a == 1 -- top level is copied
+deepProp().b.c == 1 -- child tables are copied as well
-- get the 'value' property
-value = valueProp() -- returns the original value table
+value = valueProp() -- returns the original value table
-value.a = 3 -- updates the original value table `a` value
-value.b.c = 3 -- updates the original `b` table's `c` value
+value.a = 3 -- updates the original value table `a` value
+value.b.c = 3 -- updates the original `b` table's `c` value
-valueProp(value) -- nothing is printed, since it's still the same table
+valueProp(value) -- nothing is printed, since it's still the same table
-valueProp().a == 3 -- still referencing the original table
-valueProp().b.c == 3 -- the child is still referenced too
-shallowProp().a == 1 -- still unmodified after the initial copy
-shallowProp().b.c == 3 -- still updated, since `b` was copied by reference
-deepProp().a == 1 -- still unmodified after initial copy
-deepProp().b.c == 1 -- still unmodified after initial copy
+valueProp().a == 3 -- still referencing the original table
+valueProp().b.c == 3 -- the child is still referenced too
+shallowProp().a == 1 -- still unmodified after the initial copy
+shallowProp().b.c == 3 -- still updated, since `b` was copied by reference
+deepProp().a == 1 -- still unmodified after initial copy
+deepProp().b.c == 1 -- still unmodified after initial copy
-- get the 'deep copy' property
-value = deepProp() -- returns a new table, with all child tables also copied.
+value = deepProp() -- returns a new table, with all child tables also copied.
-value.a = 4 -- updates the new table's `a` value
-value.b.c = 4 -- updates the new `b` table's `c` value
+value.a = 4 -- updates the new table's `a` value
+value.b.c = 4 -- updates the new `b` table's `c` value
-deepProp(value) -- prints "deep: a = 4, b.c = 4"
+deepProp(value) -- prints "deep: a = 4, b.c = 4"
-valueProp().a == 3 -- still referencing the original table
-valueProp().b.c == 3 -- the child is still referenced too
-shallowProp().a == 1 -- still unmodified after the initial copy
-shallowProp().b.c == 3 -- still referencing the original `b` table.
-deepProp().a == 4 -- updated to the new value
-deepProp().b.c == 4 -- updated to the new value
+valueProp().a == 3 -- still referencing the original table
+valueProp().b.c == 3 -- the child is still referenced too
+shallowProp().a == 1 -- still unmodified after the initial copy
+shallowProp().b.c == 3 -- still referencing the original `b` table.
+deepProp().a == 4 -- updated to the new value
+deepProp().b.c == 4 -- updated to the new value
-- get the 'shallow' property
-value = shallowProp() -- returns a new table with top-level keys copied.
+value = shallowProp() -- returns a new table with top-level keys copied.
-value.a = 5 -- updates the new table's `a` value
-value.b.c = 5 -- updates the original `b` table's `c` value.
+value.a = 5 -- updates the new table's `a` value
+value.b.c = 5 -- updates the original `b` table's `c` value.
-shallowProp(value) -- prints "shallow: a = 5, b.c = 5"
+shallowProp(value) -- prints "shallow: a = 5, b.c = 5"
-valueProp().a == 3 -- still referencing the original table
-valueProp().b.c == 5 -- still referencing the original `b` table
-shallowProp().a == 5 -- updated to the new value
-shallowProp().b.c == 5 -- referencing the original `b` table, which was updated
-deepProp().a == 4 -- unmodified after the last update
-deepProp().b.c == 4 -- unmodified after the last update
+valueProp().a == 3 -- still referencing the original table
+valueProp().b.c == 5 -- still referencing the original `b` table
+shallowProp().a == 5 -- updated to the new value
+shallowProp().b.c == 5 -- referencing the original `b` table, which was updated
+deepProp().a == 4 -- unmodified after the last update
+deepProp().b.c == 4 -- unmodified after the last update
```
So, a little bit tricky. The general rule of thumb is:
-1. If working with immutable objects, use the default 'value' value copy, which preserves the original.
-2. If working with an array of immutible objects, use the 'shallow' table copy.
-3. In most other cases, use a 'deep' table copy.
+
+1. If working with immutable objects, use the default `value` value copy, which preserves the original.
+2. If working with an array of immutible objects, use the `shallow` table copy.
+3. In most other cases, use a `deep` table copy.
## API Overview
+* Constants - Useful values which cannot be changed
+ * [NIL](#nil)
* Functions - API calls offered directly by the extension
* [AND](#and)
+ * [bind](#bind)
* [extend](#extend)
* [FALSE](#false)
* [IMMUTABLE](#immutable)
@@ -250,6 +288,8 @@ So, a little bit tricky. The general rule of thumb is:
* [TRUE](#true)
* Constructors - API calls which return an object, typically one that offers API methods
* [new](#new)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [mainWindow](#mainwindow)
* Methods - API calls which can only be made on an object returned by a constructor
* [ABOVE](#above)
* [AND](#and)
@@ -262,14 +302,18 @@ So, a little bit tricky. The general rule of thumb is:
* [clone](#clone)
* [deepTable](#deeptable)
* [EQ](#eq)
- * [EQUALS](#equals)
* [get](#get)
* [hasWatchers](#haswatchers)
* [id](#id)
* [IMMUTABLE](#immutable)
+ * [IS](#is)
+ * [ISNOT](#isnot)
+ * [label](#label)
+ * [mirror](#mirror)
* [monitor](#monitor)
* [mutable](#mutable)
* [mutate](#mutate)
+ * [NEQ](#neq)
* [NOT](#not)
* [OR](#or)
* [owner](#owner)
@@ -277,348 +321,425 @@ So, a little bit tricky. The general rule of thumb is:
* [set](#set)
* [shallowTable](#shallowtable)
* [toggle](#toggle)
+ * [toObservable](#toobservable)
* [unwatch](#unwatch)
* [update](#update)
* [value](#value)
* [watch](#watch)
+ * [wrap](#wrap)
## API Documentation
+### Constants
+
+#### [NIL](#nil)
+| **Signature** | `cp.prop.NIL -> cp.prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Returns a `cp.prop` which will always be `nil`. |
+| **Parameters** | |
+| **Returns** | - a new
cp.prop instance with a value of nil.
|
+
### Functions
#### [AND](#and)
| **Signature** | `cp.prop.AND(...) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` which will be `true` if all `cp.prop` instances passed into the function return a `truthy` value. |
-| **Parameters** | - * `...` - The list of `cp.prop` instances to 'AND' together.
|
-| **Returns** | |
-| **Notes** | - * The value of this instance will resolve by lazily checking the `value` of the contained `cp.prop` instances in the order provided. The first `falsy` value will be returned. Otherwise the last `truthy` value is returned.
- * The instance is **immutable**.
- * Once you have created an 'AND', you cannot 'OR' as a method. Eg, this will fail: `prop.TRUE():AND(prop:FALSE()):OR(prop.TRUE())`. This is to avoid ambiguity as to whether the 'AND' or 'OR' takes precedence. Is it `(true and false) or true` or `true and (false or true)`?.
- * To combine 'AND' and 'OR' values, group them together when combining. Eg:
- ** `(true and false) or true`: `prop.OR( prop.TRUE():AND(prop.FALSE()), prop.TRUE() )`
- ** `true and (false or true)`: `prop.TRUE():AND( prop.FALSE():OR(prop.TRUE()) )`
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` which will be `true` if all `cp.prop` instances passed into the function return a `truthy` value. |
+| **Parameters** | ... - The list of cp.prop instances to 'AND' together.
|
+| **Returns** | |
+| **Notes** | - The value of this instance will resolve by lazily checking the
value of the contained cp.prop instances in the order provided. The first falsy value will be returned. Otherwise the last truthy value is returned. - The instance is immutable.
- Once you have created an 'AND', you cannot 'OR' as a method. Eg, this will fail:
prop.TRUE():AND(prop:FALSE()):OR(prop.TRUE()). This is to avoid ambiguity as to whether the 'AND' or 'OR' takes precedence. Is it (true and false) or true or true and (false or true)?. - To combine 'AND' and 'OR' values, group them together when combining. Eg:
(true and false) or true: prop.OR( prop.TRUE():AND(prop.FALSE()), prop.TRUE() )true and (false or true): prop.TRUE():AND( prop.FALSE():OR(prop.TRUE()) )
|
+
+#### [bind](#bind)
+| **Signature** | `cp.prop.bind(owner[, relaxed]) -> function` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | This provides a utility function for binding multiple properties to a single owner in |
+| **Parameters** | - owner - The owner table to bind the properties to.
- relaxed - If
true, then non-cp.prop fields will be ignored. Otherwise they generate an error.
|
+| **Returns** | - A function which should be called, passing in a table of key/value pairs which are
string/cp.prop value.
|
+| **Notes** | - If you are binding multiple
cp.prop values that are dependent on other cp.prop values on the same owner (e.g. via mutate or a boolean join), you will have to break it up into multiple prop.bind(...) {...} calls, so that the dependent property can access the bound property. - If a
cp.prop provided as bindings already has a bound owner, it will be wrapped instead of bound directly.
|
#### [extend](#extend)
| **Signature** | `cp.prop.extend(target, source) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Makes the `target` extend the `source`. It will copy all bound properties on the source table into the target, rebinding it to the target table. Other keys are inherited via the metatable. |
-| **Parameters** | - * `target` - The target to extend
- * `source` - The source to extend from
|
-| **Returns** | - * The `target`, now extending the `source`.
|
+| **Type** | Function |
+| **Description** | Makes the `target` extend the `source`. It will copy all bound properties on the source table into the target, rebinding it to the target table. Other keys are inherited via the metatable. |
+| **Parameters** | target - The target to extendsource - The source to extend from
|
+| **Returns** | - The
target, now extending the source.
|
#### [FALSE](#false)
| **Signature** | `cp.prop.FALSE() -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` which will cache internally, initially set to `false`. |
-| **Parameters** | |
-| **Returns** | - * a `cp.prop` instance defaulting to `false`.
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` which will cache internally, initially set to `false`. |
+| **Parameters** | |
+| **Returns** | - a
cp.prop instance defaulting to false.
|
#### [IMMUTABLE](#immutable)
| **Signature** | `cp.prop.IMMUTABLE(propValue) -- cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` instance which will not allow the wrapped value to be modified. |
-| **Parameters** | - * `propValue` - The `cp.prop` value to wrap.
|
-| **Returns** | - * a new `cp.prop` instance which cannot be modified.
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` instance which will not allow the wrapped value to be modified. |
+| **Parameters** | propValue - The cp.prop value to wrap.
|
+| **Returns** | - a new
cp.prop instance which cannot be modified.
|
#### [is](#is)
| **Signature** | `cp.prop.is(value) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the `value` is an instance of a `cp.prop`. |
-| **Parameters** | - * `value` - The value to check.
|
-| **Returns** | - * `true` if the value is an instance of `cp.prop`.
|
+| **Type** | Function |
+| **Description** | Checks if the `value` is an instance of a `cp.prop`. |
+| **Parameters** | value - The value to check.
|
+| **Returns** | true if the value is an instance of cp.prop.
|
#### [NOT](#not)
| **Signature** | `cp.prop.NOT(propValue) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` which negates the provided `propValue`. Values are negated as follows: |
-| **Parameters** | - * `propValue` - Another `cp.prop` instance.
|
-| **Returns** | - * a `cp.prop` instance negating the `propValue`.
|
-| **Notes** | - * If the `propValue` is mutable, you can set the `NOT` property value and the underlying value will be set to the negated value. Be aware that the same negation rules apply when setting as when getting.
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` which negates the provided `propValue`. Values are negated as follows: |
+| **Parameters** | propValue - Another cp.prop instance.
|
+| **Returns** | - a
cp.prop instance negating the propValue.
|
+| **Notes** | - If the
propValue is mutable, you can set the NOT property value and the underlying value will be set to the negated value. Be aware that the same negation rules apply when setting as when getting.
|
#### [OR](#or)
| **Signature** | `cp.prop.OR(...) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` which will return the first 'truthy' value provided by one of the provided properties. Otherwise, returns the last 'falsy' value. |
-| **Parameters** | - * `...` - The list of `cp.prop` instances to 'OR' together.
|
-| **Returns** | |
-| **Notes** | - * The value of this instance will resolve by lazily checking the `value` of the contained `cp.prop` instances in the order provided. If any return `true`, no further instances will be checked.
- * The instance is immutable, since there is no realy way to flip the component values of an 'OR' in a way that makes sense.
- * Once you have created an 'OR', you cannot 'AND' as a method. Eg, this will fail: `prop.TRUE():OR(prop:FALSE()):AND(prop.TRUE())`. This is to avoid ambiguity as to whether the 'OR' or 'AND' takes precedence. Is it `(true or false) and true` or `true or (false and true)`?.
- * To combine 'AND' and 'OR' values, group them together when combining. Eg:
- ** `(true or false) and true`: `prop.AND( prop.TRUE():OR(prop.FALSE()), prop.TRUE() )`
- ** `true or (false and true)`: `prop.TRUE():OR( prop.FALSE():AND(prop.TRUE()) )`
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` which will return the first 'truthy' value provided by one of the provided properties. Otherwise, returns the last 'falsy' value. |
+| **Parameters** | ... - The list of cp.prop instances to 'OR' together.
|
+| **Returns** | |
+| **Notes** | - The value of this instance will resolve by lazily checking the
value of the contained cp.prop instances in the order provided. If any return true, no further instances will be checked. - The instance is immutable, since there is no realy way to flip the component values of an 'OR' in a way that makes sense.
- Once you have created an 'OR', you cannot 'AND' as a method. Eg, this will fail:
prop.TRUE():OR(prop:FALSE()):AND(prop.TRUE()). This is to avoid ambiguity as to whether the 'OR' or 'AND' takes precedence. Is it (true or false) and true or true or (false and true)?. - To combine 'AND' and 'OR' values, group them together when combining. Eg:
(true or false) and true: prop.AND( prop.TRUE():OR(prop.FALSE()), prop.TRUE() )true or (false and true): prop.TRUE():OR( prop.FALSE():AND(prop.TRUE()) )
|
#### [THIS](#this)
| **Signature** | `cp.prop.THIS([initialValue]) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` instance which will cache a value internally. It will default to the value of the `initialValue`, if provided. |
-| **Parameters** | - * `initialValue` - The initial value to set it to (optional).
|
-| **Returns** | - * a new `cp.prop` instance.
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` instance which will cache a value internally. It will default to the value of the `initialValue`, if provided. |
+| **Parameters** | initialValue - The initial value to set it to (optional).
|
+| **Returns** | |
#### [TRUE](#true)
| **Signature** | `cp.prop.TRUE() -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a new `cp.prop` which will cache internally, initially set to `true`. |
-| **Parameters** | |
-| **Returns** | - * a `cp.prop` instance defaulting to `true`.
|
+| **Type** | Function |
+| **Description** | Returns a new `cp.prop` which will cache internally, initially set to `true`. |
+| **Parameters** | |
+| **Returns** | - a
cp.prop instance defaulting to true.
|
### Constructors
#### [new](#new)
| **Signature** | `cp.prop.new(getFn, setFn, cloneFn) --> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new `prop` value, with the provided `get` and `set` functions. |
-| **Parameters** | - * `getFn` - The function that will get called to retrieve the current value.
- * `setFn` - (optional) The function that will get called to set the new value.
- * `cloneFn` - (optional) The function that will get called when cloning the property.
|
-| **Returns** | - * The new `cp.prop` instance.
|
-| **Notes** | - * `getFn` signature: `function([owner]) -> anything`
- ** `owner` - If this is attached as a method, the owner table is passed in.
- * `setFn` signature: `function(newValue[, owner])`
- ** `newValue` - The new value to store.
- ** `owner` - If this is attached as a method, the owner table is passed in.
- * `cloneFn` signature: `function(prop) -> new cp.prop`
- * This can also be executed by calling the module directly. E.g. `require('cp.prop')(myGetFunction)`
|
+| **Type** | Constructor |
+| **Description** | Creates a new `prop` value, with the provided `get` and `set` functions. |
+| **Parameters** | getFn - The function that will get called to retrieve the current value.setFn - (optional) The function that will get called to set the new value.cloneFn - (optional) The function that will get called when cloning the property.
|
+| **Returns** | - The new
cp.prop instance.
|
+| **Notes** | getFn signature: function([owner]) -> anythingowner - If this is attached as a method, the owner table is passed in.setFn signature: function(newValue[, owner])newValue - The new value to store.owner - If this is attached as a method, the owner table is passed in.cloneFn signature: function(prop) -> new cp.prop- This can also be executed by calling the module directly. E.g.
require('cp.prop')(myGetFunction)
|
+
+### Fields
+
+#### [mainWindow](#mainwindow)
+| **Signature** | `cp.prop.mainWindow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The main [Window](cp.ui.Window.md), or `nil` if none is available. |
### Methods
#### [ABOVE](#above)
| **Signature** | `cp.prop:ABOVE() -> cp.prop ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new property comparing this property to `something`. |
-| **Parameters** | - * `something` - A value, a function or a `cp.prop` to compare to.
|
-| **Returns** | - * New, read-only `cp.prop` which will be `true` if this property is greater than `something`.
|
+| **Type** | Method |
+| **Description** | Returns a new property comparing this property to `something`. |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is greater than something.
|
#### [AND](#and)
| **Signature** | `cp.prop:AND(...) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new `cp.prop` which will be `true` if this and all other `cp.prop` instances passed into the function return `true`. |
-| **Parameters** | - * `...` - The list of `cp.prop` instances to 'AND' together.
|
-| **Returns** | |
-| **Notes** | - * See the [AND Function](#and) for more details
|
+| **Type** | Method |
+| **Description** | Returns a new `cp.prop` which will be `true` if this and all other `cp.prop` instances passed into the function return `true`. |
+| **Parameters** | ... - The list of cp.prop instances to 'AND' together.
|
+| **Returns** | |
+| **Notes** | |
#### [ATLEAST](#atleast)
| **Signature** | `cp.prop:ATLEAST() -> cp.prop ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new property comparing this property to `something`. |
-| **Parameters** | - * `something` - A value, a function or a `cp.prop` to compare to.
|
-| **Returns** | - * New, read-only `cp.prop` which will be `true` if this property is less than or equal to `something`.
|
+| **Type** | Method |
+| **Description** | Returns a new property comparing this property to `something`. |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is less than or equal to something.
|
#### [ATMOST](#atmost)
| **Signature** | `cp.prop:ATMOST() -> cp.prop ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new property comparing this property to `something`. |
-| **Parameters** | - * `something` - A value, a function or a `cp.prop` to compare to.
|
-| **Returns** | - * New, read-only `cp.prop` which will be `true` if this property is less than or equal to `something`.
|
+| **Type** | Method |
+| **Description** | Returns a new property comparing this property to `something`. |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is less than or equal to something.
|
#### [BELOW](#below)
| **Signature** | `cp.prop:BELOW() -> cp.prop ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new property comparing this property to `something`. |
-| **Parameters** | - * `something` - A value, a function or a `cp.prop` to compare to.
|
-| **Returns** | - * New, read-only `cp.prop` which will be `true` if this property is less than `something`.
|
+| **Type** | Method |
+| **Description** | Returns a new property comparing this property to `something`. |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is less than something.
|
#### [bind](#bind)
-| **Signature** | `cp.prop:bind(owner) -> cp.prop` |
+| **Signature** | `cp.prop:bind(owner, [key]) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a clone of this `cp.prop` which is bound to the specified owner. |
-| **Parameters** | - * `owner` - The owner to attach to.
|
-| **Returns** | |
-| **Notes** | - * Throws an `error` if the new owner is `nil`.
|
+| **Type** | Method |
+| **Description** | Binds the property to the specified owner. Once bound, it cannot be changed. |
+| **Parameters** | owner - The owner to attach to.key - If provided, the property will be bound to the specified key.
|
+| **Returns** | |
+| **Notes** | - Throws an
error if the new owner is nil. - Throws an
error if the owner already has a property with the name provided in key. - Throws an
error if the key is not a string value.
|
#### [cached](#cached)
| **Signature** | `cp.prop:cached() -> prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This can be called once to enable caching of the result inside the `prop`. |
-| **Parameters** | |
-| **Returns** | - * The `cp.prop` instance.
|
+| **Type** | Method |
+| **Description** | This can be called once to enable caching of the result inside the `prop`. |
+| **Parameters** | |
+| **Returns** | |
#### [clear](#clear)
| **Signature** | `cp.prop:clear() -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Clears the property. Watchers will be notified if the value has changed. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Clears the property. Watchers will be notified if the value has changed. |
+| **Parameters** | |
+| **Returns** | |
#### [clone](#clone)
| **Signature** | `cp.prop:clone() -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new copy of the property. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Returns a new copy of the property. |
+| **Parameters** | |
+| **Returns** | |
#### [deepTable](#deeptable)
| **Signature** | `cp.prop:deepTable([skipMetatable]) -> prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This can be called once to enable deep copying of `table` values. By default, |
-| **Parameters** | - * `skipMetatable` - If set to `true`, copies will _not_ copy the metatable into the new tables.
|
-| **Returns** | - * The `cp.prop` instance.
|
-| **Notes** | - * See [shallowTable](#shallowTable).
|
+| **Type** | Method |
+| **Description** | This can be called once to enable deep copying of `table` values. By default, |
+| **Parameters** | skipMetatable - If set to true, copies will not copy the metatable into the new tables.
|
+| **Returns** | |
+| **Notes** | |
#### [EQ](#eq)
-| **Signature** | `cp.prop:EQ() -> cp.prop ` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Synonym for [EQUALS](#equals). |
-| **Parameters** | - * `something` - A value, a function or a `cp.prop` to compare to.
|
-| **Returns** | - * New, read-only `cp.prop` which will be `true` if this property is equal to `something`.
|
-
-#### [EQUALS](#equals)
-| **Signature** | `cp.prop:EQUALS() -> cp.prop ` |
+| **Signature** | `cp.prop:EQ(something) -> cp.prop ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new property comparing this property to `something`. |
-| **Parameters** | - * `something` - A value, a function or a `cp.prop` to compare to.
|
-| **Returns** | - * New, read-only `cp.prop` which will be `true` if this property is equal to `something`.
|
+| **Type** | Method |
+| **Description** | Synonym for [IS](#is). |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is equal to something.
|
#### [get](#get)
| **Signature** | `cp.prop:get() -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the current value of the property. |
-| **Parameters** | |
+| **Type** | Method |
+| **Description** | Returns the current value of the property. |
+| **Parameters** | |
#### [hasWatchers](#haswatchers)
| **Signature** | `cp.prop:hasWatchers() -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns `true` if the property has any watchers. |
+| **Type** | Method |
+| **Description** | Returns `true` if the property has any watchers. |
| **Parameters** | |
-| **Returns** | - `true` if any watchers have been registered.
|
+| **Returns** | true if any watchers have been registered.
|
#### [id](#id)
-| **Signature** | `cp.prop:id(newId) -> string | cp.prop` |
+| **Signature** | `cp.prop:id() -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | If `newId` is provided it is given a new ID and the `cp.prop` is returned. |
-| **Parameters** | - * `newId` - (optional) The new ID to set.
|
-| **Returns** | - * The `cp.prop` if setting a new ID, or the current ID value if not.
|
+| **Type** | Method |
+| **Description** | Returns the current ID. |
+| **Parameters** | |
+| **Returns** | |
#### [IMMUTABLE](#immutable)
| **Signature** | `cp.prop:IMMUTABLE() -- cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new `cp.prop` instance wrapping this property which will not allow it to be modified. |
-| **Parameters** | - * `propValue` - The `cp.prop` value to wrap.
|
-| **Returns** | - * a new `cp.prop` instance which cannot be modified.
|
+| **Type** | Method |
+| **Description** | Returns a new `cp.prop` instance wrapping this property which will not allow it to be modified. |
+| **Parameters** | propValue - The cp.prop value to wrap.
|
+| **Returns** | - a new
cp.prop instance which cannot be modified.
|
+
+#### [IS](#is)
+| **Signature** | `cp.prop:IS(something) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new property returning `true` if the value is equal to `something`. |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is equal to something.
|
+
+#### [ISNOT](#isnot)
+| **Signature** | `cp.prop:ISNOT(something) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new property returning `true` when this property is not equal to `something`. |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is NOT equal to something.
|
+
+#### [label](#label)
+| **Signature** | `cp.prop:label([newLabel]) -> string | cp.prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets and sets the property label. This is human-readable text describing the `cp.prop`. |
+| **Parameters** | - newLabel - (optional) if provided, this will be the new label.
|
+| **Returns** | - Either the existing label, or the
cp.prop itself if a new label was provided.
|
+
+#### [mirror](#mirror)
+| **Signature** | `cp.prop:mirror(otherProp) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Configures this prop and the other prop to mirror each other's values. |
+| **Parameters** | otherProp - The other prop to mirror.
|
+| **Returns** | The same property.
|
#### [monitor](#monitor)
-| **Signature** | `cp.prop:monitor(otherProp) -> cp.prop, function` |
+| **Signature** | `cp.prop:monitor(...) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds an uncloned watch to the `otherProp` which will trigger an [update](#update) check in this property. |
-| **Parameters** | - `otherProp` - the property to monitor
|
-| **Returns** | - `cp.prop` - This prop value.
- `function` - The watch function. Can be used to [unwatch](#unwatch) the `otherProp` if needed.
|
+| **Type** | Method |
+| **Description** | Adds an uncloned watch to the `otherProp` which will trigger an [update](#update) check in this property. |
+| **Parameters** | ... - a list of other cp.prop values to monitor.
|
+| **Returns** | cp.prop - This prop value.
|
#### [mutable](#mutable)
| **Signature** | `cp.prop:mutable() -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks if the `cp.prop` can be modified. |
-| **Parameters** | |
-| **Returns** | - * `true` if the value can be modified.
|
+| **Type** | Method |
+| **Description** | Checks if the `cp.prop` can be modified. |
+| **Parameters** | |
+| **Returns** | true if the value can be modified.
|
#### [mutate](#mutate)
-| **Signature** | `cp.prop:mutate([owner]) -> cp.prop ` |
+| **Signature** | `cp.prop:mutate(getFn[, setFn]) -> cp.prop , function` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new property that is a mutation of the current one. |
+| **Parameters** | mutateFn - The function which will mutate the value of the current property.
|
+| **Returns** | - A new
cp.prop which will return a mutation of the property value.
|
+
+#### [NEQ](#neq)
+| **Signature** | `cp.prop:NEQ(something) -> cp.prop ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new property that wraps this one. It will be able to get and set the same as this, and changes |
-| **Parameters** | - `owner` - (optional) If provided, the wrapper will be bound to the specified owner.
|
-| **Returns** | - A new `cp.prop` which wraps this property.
|
+| **Type** | Method |
+| **Description** | A synonym for [ISNOT](#isnot) |
+| **Parameters** | something - A value, a function or a cp.prop to compare to.
|
+| **Returns** | - New, read-only
cp.prop which will be true if this property is NOT equal to something.
|
#### [NOT](#not)
| **Signature** | `cp.prop:NOT() -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new `cp.prop` which negates the current value. Values are negated as follows: |
-| **Parameters** | |
-| **Returns** | - * a `cp.prop` instance negating the current instance.
|
-| **Notes** | - * If this property is mutable, you can set the `NOT` property value and this property will be set to the negated value. Be aware that the same negation rules apply when setting as when getting.
|
+| **Type** | Method |
+| **Description** | Returns a new `cp.prop` which negates the current value. Values are negated as follows: |
+| **Parameters** | |
+| **Returns** | - a
cp.prop instance negating the current instance.
|
+| **Notes** | - If this property is mutable, you can set the
NOT property value and this property will be set to the negated value. Be aware that the same negation rules apply when setting as when getting.
|
#### [OR](#or)
| **Signature** | `cp.prop:OR(...) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a new `cp.prop` which will be `true` if this or any `cp.prop` instance passed into the function returns `true`. |
-| **Parameters** | - * `...` - The list of `cp.prop` instances to 'OR' together.
|
-| **Returns** | |
-| **Notes** | - * See [OR Function](#or) for more details.
|
+| **Type** | Method |
+| **Description** | Returns a new `cp.prop` which will be `true` if this or any `cp.prop` instance passed into the function returns `true`. |
+| **Parameters** | ... - The list of cp.prop instances to 'OR' together.
|
+| **Returns** | |
+| **Notes** | |
#### [owner](#owner)
| **Signature** | `cp.prop:owner() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | If this is a 'method', return the table instance the method is attached to. |
-| **Parameters** | |
-| **Returns** | - * The owner table, or `nil`.
|
+| **Type** | Method |
+| **Description** | If this is a 'method', return the table instance the method is attached to. |
+| **Parameters** | |
+| **Returns** | |
#### [preWatch](#prewatch)
-| **Signature** | `cp.prop:preWatch(preWatchFn) -> nil` |
+| **Signature** | `cp.prop:preWatch(preWatchFn) -> cp.prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds a function which will be called once if any watchers are added to this prop. |
-| **Parameters** | - `preWatchFn` - The function to call once when the prop is watched. Has the signature `function(owner, prop)`.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Adds a function which will be called once if any watchers are added to this prop. |
+| **Parameters** | preWatchFn - The function to call once when the prop is watched. Has the signature function(owner, prop).
|
+| **Returns** | |
#### [set](#set)
| **Signature** | `cp.prop:set(newValue) -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Sets the property to the specified value. Watchers will be notified if the value has changed. |
-| **Parameters** | - * `newValue` - The new value to set. May be `nil`.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Sets the property to the specified value. Watchers will be notified if the value has changed. |
+| **Parameters** | newValue - The new value to set. May be nil.
|
+| **Returns** | - The current value of the prop. May not be the same as
newValue.
|
#### [shallowTable](#shallowtable)
| **Signature** | `cp.prop:shallowTable(skipMetatable) -> prop` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | This can be called once to enable shallow cloning of `table` values. By default, |
-| **Parameters** | - * `skipMetatable` - If set to `true`, the metatable will _not_ be copied to the new table.
|
-| **Returns** | - * The `cp.prop` instance.
|
-| **Notes** | - * See [deepTable](#deepTable).
|
+| **Type** | Method |
+| **Description** | This can be called once to enable shallow cloning of `table` values. By default, |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | |
#### [toggle](#toggle)
| **Signature** | `cp.prop:toggle() -> boolean | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Toggles the current value. Values are modified as follows: |
-| **Parameters** | |
-| **Returns** | |
-| **Notes** | - * If the value is immutable, an error will be thrown.
- * If you toggle a non-boolean parameter twice, it will end up set to `true`.
|
+| **Type** | Method |
+| **Description** | Toggles the current value. Values are modified as follows: |
+| **Parameters** | |
+| **Returns** | |
+| **Notes** | - If the value is immutable, an error will be thrown.
- If you toggle a non-boolean parameter twice, it will end up set to
true.
|
+
+#### [toObservable](#toobservable)
+| **Signature** | `cp.prop:toObservable() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `cp.rx.Observable` for the property. This will emit |
+| **Parameters** | |
+| **Returns** | - The
Observable instance for the property.
|
+| **Notes** | - It will only emit
onNext events, never an onError or onCompleted event. - This will trigger an
update each time it is called.
|
#### [unwatch](#unwatch)
| **Signature** | `cp.prop:unwatch(watchFn) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Removes the specified watch method as a watcher, if present. An example of adding and removing a watch: |
-| **Parameters** | - * `watchFn` - The original watch function to remove. Must be the same instance that was added.
- * `notifyNow` - The function will be triggered immediately with the current state. Defaults to `false`.
|
-| **Returns** | - * `cp.prop` - The same `cp.prop` instance
- * `function` - The watch function, which can be passed to [unwatch](#unwatch) to stop watching.
|
-| **Notes** | - * You can watch immutable values. Wrapped `cp.prop` instances may not be immutable, and any changes to them will cause watchers to be notified up the chain.
|
+| **Type** | Method |
+| **Description** | Removes the specified watch method as a watcher, if present. An example of adding and removing a watch: |
+| **Parameters** | watchFn - The original watch function to remove. Must be the same instance that was added.
|
+| **Returns** | true if the function was watching and successfully removed, otherwise false.
|
#### [update](#update)
| **Signature** | `cp.prop:update() -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Forces an update of the property and notifies any watchers if it has changed. |
-| **Parameters** | |
+| **Type** | Method |
+| **Description** | Forces an update of the property and notifies any watchers if it has changed. |
+| **Parameters** | |
#### [value](#value)
| **Signature** | `cp.prop:value([newValue]) -> value` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the current value of the `cp.prop` instance. If a `newValue` is provided, and the instance is mutable, the value will be updated and the new value is returned. If it is not mutable, an error will be thrown. |
-| **Parameters** | - * `newValue` - The new value to set the instance to.
|
-| **Returns** | - * The current boolean value.
|
-| **Notes** | - * If you need to set the property to `nil`, use the [set method](#set), otherwise it will be ignored.
|
+| **Type** | Method |
+| **Description** | Returns the current value of the `cp.prop` instance. If a `newValue` is provided, and the instance is mutable, the value will be updated and the new value is returned. If it is not mutable, an error will be thrown. |
+| **Parameters** | newValue - The new value to set the instance to.
|
+| **Returns** | - The current boolean value.
|
+| **Notes** | - If you need to set the property to
nil, use the set method, otherwise it will be ignored.
|
#### [watch](#watch)
| **Signature** | `cp.prop:watch(watchFn[, notifyNow]) -> cp.prop, function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds the watch function to the value. When the value changes, watchers are notified by calling the function. The function should have the following signature: |
-| **Parameters** | - * `watchFn` - The watch function, with the signature `function(newValue, owner)`.
- * `notifyNow` - The function will be triggered immediately with the current state. Defaults to `false`.
- * `uncloned` - If `true`, the watch function will not be attached to any clones of this prop.
|
-| **Returns** | - * `cp.prop` - The same `cp.prop` instance
- * `function` - The watch function, which can be passed to [unwatch](#unwatch) to stop watching.
|
-| **Notes** | - * You can watch immutable values. Wrapped `cp.prop` instances may not be immutable, and any changes to them will cause watchers to be notified up the chain.
|
+| **Type** | Method |
+| **Description** | Adds the watch function to the value. When the value changes, watchers are notified by calling the function. The function should have the following signature: |
+| **Parameters** | watchFn - The watch function, with the signature function(newValue, owner).notifyNow - The function will be triggered immediately with the current state. Defaults to false.uncloned - If true, the watch function will not be attached to any clones of this prop.
|
+| **Returns** | cp.prop - The same cp.prop instancefunction - The watch function, which can be passed to unwatch to stop watching.
|
+| **Notes** | - You can watch immutable values. Wrapped
cp.prop instances may not be immutable, and any changes to them will cause watchers to be notified up the chain.
|
+
+#### [wrap](#wrap)
+| **Signature** | `cp.prop:wrap([owner[, key]]) -> cp.prop ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new property that wraps this one. It will be able to get and set the same as this, and changes |
+| **Parameters** | owner - (optional) If provided, the wrapper will be bound to the specified owner.key - (optional) If provided, the wrapper will be assigned to the owner with the specified key.
|
+| **Returns** | - A new
cp.prop which wraps this property.
|
diff --git a/api/cp/cp.protect.md b/api/cp/cp.protect.md
new file mode 100644
index 0000000..f7c7eb7
--- /dev/null
+++ b/api/cp/cp.protect.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.protect
+---
+
+Utility function for protecting a table from being modified.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.rx.AsyncSubject.md b/api/cp/cp.rx.AsyncSubject.md
new file mode 100644
index 0000000..711943f
--- /dev/null
+++ b/api/cp/cp.rx.AsyncSubject.md
@@ -0,0 +1,59 @@
+# [docs](index.md) » cp.rx.AsyncSubject
+---
+
+`AsyncSubjects` are subjects that produce either no values or a single value. If
+multiple values are produced via `onNext`, only the last one is used. If `onError` is called, then
+no value is produced and `onError` is called on any subscribed [Observers](cp.rx.Observers.md).
+If an [Observer](cp.rx.Observer.md) subscribes and the `AsyncSubject` has already terminated,
+the `Observer` will immediately receive the value or the error.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [onCompleted](#oncompleted)
+ * [onError](#onerror)
+ * [onNext](#onnext)
+ * [subscribe](#subscribe)
+
+## API Documentation
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.AsyncSubject.create() -> cp.rx.AsyncSubject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `AsyncSubject`. |
+| **Returns** | |
+
+### Methods
+
+#### [onCompleted](#oncompleted)
+| **Signature** | `cp.rx.AsyncSubject:onCompleted() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Signal to all [Observers](cp.rx.Observers.md) that the `AsyncSubject` will not produce any more values. |
+
+#### [onError](#onerror)
+| **Signature** | `cp.rx.AsyncSubject:onError(message) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Signal to all [Observers](cp.rx.Observer.md) that an error has occurred. |
+| **Parameters** | - message - A string describing what went wrong.
|
+
+#### [onNext](#onnext)
+| **Signature** | `cp.rx.AsyncSubject:onNext(...) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes zero or more values to the `AsyncSubject`. |
+| **Parameters** | - ... - The values to send.
|
+
+#### [subscribe](#subscribe)
+| **Signature** | `cp.rx.AsyncSubject:subscribe(onNext, onError, onCompleted) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new [Observer](cp.rx.Observer.md) and attaches it to the `AsyncSubject`. |
+| **Parameters** | - onNext | observer - A
function called when the AsyncSubject produces a value or an existing Observer to attach to the AsyncSubject. - onError - A
function called when the AsyncSubject terminates due to an error. - onCompleted - A
funtion called when the AsyncSubject completes normally.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.BehaviorSubject.md b/api/cp/cp.rx.BehaviorSubject.md
new file mode 100644
index 0000000..a404ac8
--- /dev/null
+++ b/api/cp/cp.rx.BehaviorSubject.md
@@ -0,0 +1,47 @@
+# [docs](index.md) » cp.rx.BehaviorSubject
+---
+
+A [Subject](cp.rx.Subject.md) that tracks its current value. Provides an accessor to retrieve the most
+recent pushed value, and all subscribers immediately receive the latest value.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [create](#create)
+ * [getValue](#getvalue)
+ * [onNext](#onnext)
+ * [subscribe](#subscribe)
+
+## API Documentation
+
+### Methods
+
+#### [create](#create)
+| **Signature** | `cp.rx.BehaviorSubject.create(...) -> cp.rx.BehaviorSubject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new `BehaviorSubject`. |
+| **Parameters** | - ... - The initial values.
|
+| **Returns** | |
+
+#### [getValue](#getvalue)
+| **Signature** | `cp.rx.BehaviorSubject:getValue() -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the last value emitted by the `BehaviorSubject`, or the initial value passed to the |
+| **Returns** | |
+
+#### [onNext](#onnext)
+| **Signature** | `cp.rx.BehaviorSubject:onNext(...) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes zero or more values to the `BehaviorSubject`. They will be broadcasted to all [Observers](cp.rx.Observer.md). |
+| **Parameters** | - ... - The values to send.
|
+
+#### [subscribe](#subscribe)
+| **Signature** | `cp.rx.BehaviorSubject:subscribe(observer | onNext, onError, onCompleted) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new [Observer](cp.rx.Observer.md) and attaches it to the `BehaviorSubject`. Immediately broadcasts the most |
+| **Parameters** | - observer | onNext - The Observer subscribing, or the
function called when the BehaviorSubject produces a value. - onError - A
function called when the BehaviorSubject terminates due to an error. - onCompleted - A
function called when the BehaviorSubject completes normally.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.CooperativeScheduler.md b/api/cp/cp.rx.CooperativeScheduler.md
new file mode 100644
index 0000000..9615421
--- /dev/null
+++ b/api/cp/cp.rx.CooperativeScheduler.md
@@ -0,0 +1,50 @@
+# [docs](index.md) » cp.rx.CooperativeScheduler
+---
+
+Manages [Observables](cp.rx.Observer.md) using `coroutines` and a virtual clock that must be updated
+manually.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [isEmpth](#isempth)
+ * [schedule](#schedule)
+ * [update](#update)
+
+## API Documentation
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.CooperativeScheduler.create([currentTime]) -> cp.rx.CooperativeScheduler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `CooperativeScheduler`. |
+| **Parameters** | - currentTime - A time to start the scheduler at. Defaults to
0.
|
+| **Returns** | - The new
CooperativeScheduler.
|
+
+### Methods
+
+#### [isEmpth](#isempth)
+| **Signature** | `cp.rx.CooperativeScheduler:isEmpth() -> cp.rx.CooperativeScheduler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns whether or not the `CooperativeScheduler`'s queue is empty. |
+| **Returns** | true if the scheduler is empty, otherwise false.
|
+
+#### [schedule](#schedule)
+| **Signature** | `cp.rx.CooperativeScheduler:schedule(action[, delay]) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Schedules a `function` to be run after an optional delay. Returns a [Reference](cp.rx.Reference.md) that will stop |
+| **Parameters** | - action - The
function to execute. Will be converted into a coroutine. The coroutine may yield execution back to the scheduler with an optional number, which will put it to sleep for a time period. - delay - Delay execution of the action by a virtual time period. Defaults to
0.
|
+| **Returns** | |
+
+#### [update](#update)
+| **Signature** | `cp.rx.CooperativeScheduler:update(delta) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Triggers an update of the `CooperativeScheduler`. The clock will be advanced and the scheduler |
+| **Parameters** | - delta - An amount of time to advance the clock by. It is common to pass in the
|
+
diff --git a/api/cp/cp.rx.ImmediateScheduler.md b/api/cp/cp.rx.ImmediateScheduler.md
new file mode 100644
index 0000000..70bb362
--- /dev/null
+++ b/api/cp/cp.rx.ImmediateScheduler.md
@@ -0,0 +1,32 @@
+# [docs](index.md) » cp.rx.ImmediateScheduler
+---
+
+Schedules `Observables` by running all operations immediately.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [schedule](#schedule)
+
+## API Documentation
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.ImmediateScheduler.create() -> cp.rx.ImmediageScheduler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ImmediateScheduler`. |
+| **Returns** | - The new
ImmediateScheduler.
|
+
+### Methods
+
+#### [schedule](#schedule)
+| **Signature** | `cp.rx.ImmediateScheduler:schedule(action) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Schedules a `function` to be run on the scheduler. It is executed immediately. |
+| **Parameters** | - action - The
function to execute.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.Observable.md b/api/cp/cp.rx.Observable.md
new file mode 100644
index 0000000..7e20a4e
--- /dev/null
+++ b/api/cp/cp.rx.Observable.md
@@ -0,0 +1,631 @@
+# [docs](index.md) » cp.rx.Observable
+---
+
+Observables push values to [Observers](cp.rx.Observer.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+ * [defer](#defer)
+ * [empty](#empty)
+ * [firstEmitting](#firstemitting)
+ * [fromCoroutine](#fromcoroutine)
+ * [fromFileByLine](#fromfilebyline)
+ * [fromRange](#fromrange)
+ * [fromTable](#fromtable)
+ * [never](#never)
+ * [of](#of)
+ * [replicate](#replicate)
+ * [throw](#throw)
+ * [zip](#zip)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [all](#all)
+ * [average](#average)
+ * [buffer](#buffer)
+ * [catch](#catch)
+ * [combineLatest](#combinelatest)
+ * [compact](#compact)
+ * [concat](#concat)
+ * [contains](#contains)
+ * [count](#count)
+ * [debounce](#debounce)
+ * [defaultIfEmpty](#defaultifempty)
+ * [delay](#delay)
+ * [distinct](#distinct)
+ * [distinctUntilChanged](#distinctuntilchanged)
+ * [dump](#dump)
+ * [elementAt](#elementat)
+ * [filter](#filter)
+ * [finalize](#finalize)
+ * [find](#find)
+ * [first](#first)
+ * [flatMap](#flatmap)
+ * [flatMapLatest](#flatmaplatest)
+ * [flatten](#flatten)
+ * [ignoreElements](#ignoreelements)
+ * [last](#last)
+ * [map](#map)
+ * [max](#max)
+ * [merge](#merge)
+ * [min](#min)
+ * [next](#next)
+ * [partition](#partition)
+ * [pluck](#pluck)
+ * [reduce](#reduce)
+ * [reject](#reject)
+ * [retry](#retry)
+ * [retryWithDelay](#retrywithdelay)
+ * [sample](#sample)
+ * [scan](#scan)
+ * [skip](#skip)
+ * [skipLast](#skiplast)
+ * [skipUntil](#skipuntil)
+ * [skipWhile](#skipwhile)
+ * [startWith](#startwith)
+ * [subscribe](#subscribe)
+ * [sum](#sum)
+ * [switch](#switch)
+ * [switchIfEmpty](#switchifempty)
+ * [take](#take)
+ * [takeLast](#takelast)
+ * [takeUntil](#takeuntil)
+ * [takeWhile](#takewhile)
+ * [tap](#tap)
+ * [timeout](#timeout)
+ * [unpack](#unpack)
+ * [unwrap](#unwrap)
+ * [with](#with)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.rx.Observable.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the thing is an instance of [Observable](cp.rx.Observable.md). |
+| **Parameters** | - thing - The thing to check.
|
+| **Returns** | true if the thing is an Observable.
|
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.Observable.create(onSubscription) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Observable. |
+| **Parameters** | - onSubscription - The reference function that produces values.
|
+| **Returns** | |
+
+#### [defer](#defer)
+| **Signature** | `cp.rx.Observable.defer(fn) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an `Observable` that executes the `function` to create a new `Observable` each time an [Observer](cp.rx.Observer.md) subscribes. |
+| **Parameters** | - fn - A function that returns an
Observable.
|
+| **Returns** | |
+
+#### [empty](#empty)
+| **Signature** | `cp.rx.Observable.empty() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Returns an Observable that immediately completes without producing a value. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [firstEmitting](#firstemitting)
+| **Signature** | `cp.rx.Observable.firstEmitting(...) -> cp.rx.Observer` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Given a set of Observables, produces values from only the first one to produce a value or complete. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [fromCoroutine](#fromcoroutine)
+| **Signature** | `cp.rx.Observable.fromCoroutine(fn, scheduler) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an Observable that produces values when the specified coroutine yields. |
+| **Parameters** | - fn - A
coroutine or function to use to generate values. Note that if a coroutine is used, the values it yields will be shared by all subscribed Observers (influenced by the Scheduler), whereas a new coroutine will be created for each Observer when a function is used.
|
+| **Returns** | |
+
+#### [fromFileByLine](#fromfilebyline)
+| **Signature** | `cp.rx.Observable.fromFileByLine(filename) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an Observable that produces values from a file, line by line. |
+| **Parameters** | - filename - The name of the file used to create the Observable.
|
+| **Returns** | |
+
+#### [fromRange](#fromrange)
+| **Signature** | `cp.rx.Observable.fromRange(initial[, limit[, step]]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an Observable that produces a range of values in a manner similar to a Lua `for` loop. |
+| **Parameters** | - initial - The first value of the range, or the upper limit if no other arguments are specified.
- limit - The second value of the range. Defaults to no limit.
- step - An amount to increment the value by each iteration. Defaults to
1.
|
+| **Returns** | |
+
+#### [fromTable](#fromtable)
+| **Signature** | `cp.rx.Observable.fromTable(t, iterator, keys) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an `Observable` that produces values from a table. |
+| **Parameters** | - t - The
table used to create the Observable. - iterator - An iterator used to iterate the table, e.g.
pairs or ipairs. Defaults to pairs. - keys - If
true, also emit the keys of the table. Defaults to false.
|
+| **Returns** | |
+
+#### [never](#never)
+| **Signature** | `cp.rx.Observable.never() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Returns an Observable that never produces values and never completes. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [of](#of)
+| **Signature** | `cp.rx.Observable.of(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an Observable that produces a set of values. |
+| **Parameters** | - ... - The list of values to send as individual
onNext values.
|
+| **Returns** | |
+
+#### [replicate](#replicate)
+| **Signature** | `cp.rx.Observable.replicate(value[, count]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates an `Observable` that repeats a value a specified number of times. |
+| **Parameters** | - value - The value to repeat.
- count - The number of times to repeat the value. If left unspecified, the value is repeated an infinite number of times.
|
+| **Returns** | |
+
+#### [throw](#throw)
+| **Signature** | `cp.rx.Observable.throw(message, ...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Returns an Observable that immediately produces an error. |
+| **Parameters** | - message - The message to send.
- ... - The additional values to apply to the message, using
string.format syntax.
|
+| **Returns** | |
+
+#### [zip](#zip)
+| **Signature** | `cp.rx.Observable.zip(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Returns an `Observable` that merges the values produced by the source `Observables` by grouping them |
+| **Parameters** | - ... - The
Observables to zip.
|
+| **Returns** | |
+
+### Methods
+
+#### [all](#all)
+| **Signature** | `cp.rx.Observable:all(predicate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Determine whether all items emitted by an Observable meet some criteria. |
+| **Parameters** | - predicate - The predicate used to evaluate objects. Defaults to the
identity.
|
+| **Returns** | |
+
+#### [average](#average)
+| **Signature** | `cp.rx.Observable:average() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an Observable that produces the average of all values produced by the original. |
+| **Returns** | |
+
+#### [buffer](#buffer)
+| **Signature** | `cp.rx.Observable:buffer(size) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an Observable that buffers values from the original and produces them as multiple values. |
+| **Parameters** | - size - The size of the buffer.
|
+| **Returns** | |
+
+#### [catch](#catch)
+| **Signature** | `cp.rx.Observable:catch(handler) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an Observable that intercepts any errors from the previous and replace them with values |
+| **Parameters** | - handler - An
Observable or a function that returns an Observable to replace the source Observable in the event of an error.
|
+| **Returns** | |
+
+#### [combineLatest](#combinelatest)
+| **Signature** | `cp.rx.Observable:combineLatest(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that runs a combinator function on the most recent values from a set |
+| **Parameters** | - ... - One or more
Observables to combine. - combinator - A
function that combines the latest result from each Observable and returns a single value.
|
+| **Returns** | |
+
+#### [compact](#compact)
+| **Signature** | `cp.rx.Observable:compact() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the values of the first with falsy values removed. |
+| **Returns** | |
+
+#### [concat](#concat)
+| **Signature** | `cp.rx.Observable:concat(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the values produced by all the specified `Observables` in |
+| **Parameters** | - ... - The list of
Observables to concatenate.
|
+| **Returns** | |
+
+#### [contains](#contains)
+| **Signature** | `cp.rx.Observable:contains(value) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces a single `boolean` value representing whether or not the |
+| **Parameters** | - value - The value to search for.
== is used for equality testing.
|
+| **Returns** | |
+
+#### [count](#count)
+| **Signature** | `cp.rx.Observable:count([predicate]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that produces a single value representing the number of values produced |
+| **Parameters** | - predicate - The predicate
function used to match values.
|
+| **Returns** | |
+
+#### [debounce](#debounce)
+| **Signature** | `cp.rx.Observable:debounce(time[, scheduler]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that mirrors the source `Observable`, except that it drops items emitted by the source |
+| **Parameters** | - time - The number of milliseconds.
- scheduler - The scheduler. Uses the defaultScheduler by default.
|
+| **Returns** | |
+
+#### [defaultIfEmpty](#defaultifempty)
+| **Signature** | `cp.rx.Observable:defaultIfEmpty(...)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces a default set of items if the source `Observable` produces |
+| **Returns** | |
+
+#### [delay](#delay)
+| **Signature** | `cp.rx.Observable:delay(time, scheduler) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the values of the original delayed by a time period. |
+| **Parameters** | - time - An amount in milliseconds to delay by, or a
function which returns this value. - scheduler - The Scheduler to run the
Observable on.
|
+| **Returns** | |
+
+#### [distinct](#distinct)
+| **Signature** | `cp.rx.Observable:distinct() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the values from the original with duplicates removed. |
+| **Returns** | |
+
+#### [distinctUntilChanged](#distinctuntilchanged)
+| **Signature** | `cp.rx.Observable:distinctUntilChanged([comparator]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that only produces values from the original if they are different from |
+| **Parameters** | - comparator - A
function used to compare 2 values. If unspecified, == is used.
|
+| **Returns** | |
+
+#### [dump](#dump)
+| **Signature** | `cp.rx.Observable:dump(name, formatter)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Subscribes to this Observable and prints values it produces. |
+| **Parameters** | - name - Prefixes the printed messages with a name.
- formatter - A function that formats one or more values to be printed. Defaults to
tostring.
|
+| **Returns** | |
+
+#### [elementAt](#elementat)
+| **Signature** | `cp.rx.Observable:elementAt(index) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that produces the `n`th element produced by the source `Observable`. |
+| **Parameters** | - index - The index of the item, with an index of
1 representing the first.
|
+| **Returns** | |
+
+#### [filter](#filter)
+| **Signature** | `cp.rx.Observable:filter(predicate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that only produces values of the first that satisfy a predicate. |
+| **Parameters** | - predicate - The predicate
function used to filter values.
|
+| **Returns** | |
+
+#### [finalize](#finalize)
+| **Signature** | `cp.rx.Observable:finalize(handler) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that mirrors the source `Observable`, but will call a specified `function` |
+| **Parameters** | - handler - The handler
function to call when onError/onCompleted occurs.
|
+| **Returns** | |
+
+#### [find](#find)
+| **Signature** | `cp.rx.Observable:find(predicate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the first value of the original that satisfies a |
+| **Parameters** | - predicate - The predicate
function used to find a value.
|
+| **Returns** | |
+
+#### [first](#first)
+| **Signature** | `cp.rx.Observable:first() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that only produces the first result of the original. |
+| **Returns** | |
+
+#### [flatMap](#flatmap)
+| **Signature** | `cp.rx.Observable:flatMap(callback) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that transform the items emitted by an `Observable` into `Observables`, |
+| **Parameters** | - callback - The
function to transform values from the original Observable.
|
+| **Returns** | |
+
+#### [flatMapLatest](#flatmaplatest)
+| **Signature** | `cp.rx.Observable:flatMapLatest([callback]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that uses a callback to create `Observables` from the values produced by |
+| **Parameters** | @arg {function=identity} callback - The function used to convert values to Observables. Defaults to the identity function.
|
+| **Returns** | |
+
+#### [flatten](#flatten)
+| **Signature** | `cp.rx.Observable:flatten()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that subscribes to the `Observables` produced by the original and |
+| **Returns** | |
+
+#### [ignoreElements](#ignoreelements)
+| **Signature** | `cp.rx.Observable:ignoreElements() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that terminates when the source terminates but does not produce any |
+| **Returns** | |
+
+#### [last](#last)
+| **Signature** | `cp.rx.Observable:last() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that only produces the last result of the original. |
+| **Returns** | |
+
+#### [map](#map)
+| **Signature** | `cp.rx.Observable:map(callback) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the values of the original transformed by a `function`. |
+| **Parameters** | - callback - The
function to transform values from the original Observable.
|
+| **Returns** | |
+
+#### [max](#max)
+| **Signature** | `cp.rx.Observable:max() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the maximum value produced by the original. |
+| **Returns** | |
+
+#### [merge](#merge)
+| **Signature** | `cp.rx.Observable:merge(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the values produced by all the specified `Observables` in |
+| **Parameters** | - ... - One or more
Observables to merge.
|
+| **Returns** | |
+
+#### [min](#min)
+| **Signature** | `cp.rx.Observable:min() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the minimum value produced by the original. |
+| **Returns** | |
+
+#### [next](#next)
+| **Signature** | `cp.rx.Observable:next() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces at most the first result from the original and then completes. |
+
+#### [partition](#partition)
+| **Signature** | `cp.rx.Observable:partition(predicate) -> cp.rx.Observable, cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns two `Observables`: one that produces values for which the predicate returns truthy for, |
+| **Parameters** | - predicate - The predicate
function used to partition the values.
|
+| **Returns** | - The 'truthy'
Observable. - The 'falsy'
Observable.
|
+
+#### [pluck](#pluck)
+| **Signature** | `cp.rx.Observable:pluck(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces values computed by extracting the given keys from the |
+| **Parameters** | - ... - The key to extract from the
table. Multiple keys can be specified to recursively pluck values from nested tables.
|
+| **Returns** | |
+
+#### [reduce](#reduce)
+| **Signature** | `cp.rx.Observable:reduce(accumulator[, seed]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces a single value computed by accumulating the results of |
+| **Parameters** | - accumulator - Accumulates the values of the original
Observable. Will be passed the return value of the last call as the first argument and the current values as the rest of the arguments. - seed - A value to pass to the accumulator the first time it is run.
|
+| **Returns** | |
+
+#### [reject](#reject)
+| **Signature** | `cp.rx.Observable:reject(predicate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces values from the original which do not satisfy a predicate. |
+| **Parameters** | - predicate - The predicate
function used to reject values.
|
+| **Returns** | |
+
+#### [retry](#retry)
+| **Signature** | `cp.rx.Observable:retry([count]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that restarts in the event of an error. |
+| **Parameters** | - count - The maximum number of times to retry. If left unspecified, an infinite number of retries will be attempted.
|
+| **Returns** | |
+
+#### [retryWithDelay](#retrywithdelay)
+| **Signature** | `cp.rx.Observable:retryWithDelay(count[, delay[, scheduler]]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that restarts in the event of an error. |
+| **Parameters** | - count - The maximum number of times to retry. If left unspecified, an infinite number of retries will be attempted.
- delay - The
function returning or a number representing the delay in milliseconds or a function. If left unspecified, defaults to 1000 ms (1 second). - scheduler - The Scheduler to use. If not specified, it will use the [defaultScheduler](cp.rx.util#defaultScheduler].
|
+| **Returns** | |
+
+#### [sample](#sample)
+| **Signature** | `cp.rx.Observable:sample(sampler) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces its most recent value every time the specified observable |
+| **Parameters** | - sampler - The
Observable that is used to sample values from this Observable.
|
+
+#### [scan](#scan)
+| **Signature** | `cp.rx.Observable:scan(accumulator, seed) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces values computed by accumulating the results of running a |
+| **Parameters** | - accumulator - Accumulates the values of the original
Observable. Will be passed the return value of the last call as the first argument and the current values as the rest of the arguments. Each value returned from this function will be emitted by the Observable. - seed - A value to pass to the accumulator the first time it is run.
|
+| **Returns** | |
+
+#### [skip](#skip)
+| **Signature** | `cp.rx.Observable:skip([n]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that skips over a specified number of values produced by the original |
+| **Parameters** | - n - The number of values to ignore. Defaults to
1.
|
+| **Returns** | |
+
+#### [skipLast](#skiplast)
+| **Signature** | `cp.rx.Observable:skipLast(count) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that omits a specified number of values from the end of the original `Observable`. |
+| **Parameters** | - count - The number of items to omit from the end.
|
+| **Returns** | |
+
+#### [skipUntil](#skipuntil)
+| **Signature** | `cp.rx.Observable:skipUntil(other) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that skips over values produced by the original until the specified |
+| **Parameters** | - other - The
Observable that triggers the production of values.
|
+| **Returns** | |
+
+#### [skipWhile](#skipwhile)
+| **Signature** | `cp.rx.Observable:skipWhile(predicate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that skips elements until the predicate returns `falsy` for one of them. |
+| **Parameters** | - predicate - The predicate
function used to continue skipping values.
|
+| **Returns** | |
+
+#### [startWith](#startwith)
+| **Signature** | `cp.rx.Observable:startWith(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces the specified values followed by all elements produced by |
+| **Parameters** | - values - The values to produce before the Observable begins producing values normally.
|
+| **Returns** | |
+
+#### [subscribe](#subscribe)
+| **Signature** | `cp.rx.Observable:subscribe(observer | onNext[, onError[, onCompleted]]) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shorthand for creating an [Observer](cp.rx.Observer.md) and passing it to this Observable's [subscription](#subscri) function. |
+| **Parameters** | - observer | onNext - Either an Observer or a
function to be called when the Observable produces a value. - onError - A
function to be called when the Observable terminates due to an error. - onCompleted - A 'function` to be called when the Observable completes normally.
|
+| **Returns** | - A Reference which can be used to cancel the subscription.
|
+
+#### [sum](#sum)
+| **Signature** | `cp.rx.Observable:sum() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that produces a single value representing the sum of the values produced |
+| **Returns** | |
+
+#### [switch](#switch)
+| **Signature** | `cp.rx.Observable:switch() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Given an `Observable` that produces `Observables`, returns an `Observable` that produces the values |
+| **Returns** | |
+
+#### [switchIfEmpty](#switchifempty)
+| **Signature** | `cp.rx.Observable:switchIfEmpty(alternate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Switch to an alternate `Observable` if this one sends an `onCompleted` without any `onNext`s. |
+| **Parameters** | - alternate - An
Observable to switch to if this does not send any onNext values before the onCompleted.
|
+| **Returns** | |
+
+#### [take](#take)
+| **Signature** | `cp.rx.Observable:take([n]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that only produces the first n results of the original. |
+| **Parameters** | - n - The number of elements to produce before completing. Defaults to
1.
|
+| **Returns** | |
+
+#### [takeLast](#takelast)
+| **Signature** | `cp.rx.Observable:takeLast(count) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that produces a specified number of elements from the end of a source |
+| **Parameters** | - count - The number of elements to produce.
|
+| **Returns** | |
+
+#### [takeUntil](#takeuntil)
+| **Signature** | `cp.rx.Observable:takeUntil(other) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that completes when the specified `Observable` fires. |
+| **Parameters** | - other - The
Observable that triggers completion of the original.
|
+| **Returns** | |
+
+#### [takeWhile](#takewhile)
+| **Signature** | `cp.rx.Observable:takeWhile(predicate) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` that produces elements until the predicate returns `falsy`. |
+| **Parameters** | - predicate - The predicate
function used to continue production of values.
|
+| **Returns** | |
+
+#### [tap](#tap)
+| **Signature** | `cp.rx.Observable:tap(onNext[, onError[, onCompleted]]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Runs a `function` each time this `Observable` has activity. Similar to [subscribe](#subscribe) but does not |
+| **Parameters** | - onNext - Run when the
Observable produces values. - onError - Run when the
Observable encounters a problem. - onCompleted - Run when the
Observable completes.
|
+| **Returns** | |
+
+#### [timeout](#timeout)
+| **Signature** | `cp.rx.Observable:timeout(timeInMs, next[, scheduler]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that will emit an error if the specified time is exceded since the most recent `next` value. |
+| **Parameters** | - timeInMs - The time in milliseconds to wait before an error is emitted.
- next - If a
string, it will be sent as an error. If an Observable, switch to that Observable instead of sending an error. - scheduler - The scheduler to use. Uses the defaultScheduler if not provided.
|
+| **Returns** | |
+
+#### [unpack](#unpack)
+| **Signature** | `cp.rx.Observable:unpack() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that unpacks the `tables` produced by the original. |
+| **Returns** | |
+
+#### [unwrap](#unwrap)
+| **Signature** | `cp.rx.Observable:unwrap() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that takes any values produced by the original that consist of multiple |
+| **Returns** | |
+
+#### [with](#with)
+| **Signature** | `cp.rx.Observable:with(...) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns an `Observable` that produces values from the original along with the most recently |
+| **Parameters** | - ... - The
Observables to include the most recent values from.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.Observer.md b/api/cp/cp.rx.Observer.md
new file mode 100644
index 0000000..0fb3206
--- /dev/null
+++ b/api/cp/cp.rx.Observer.md
@@ -0,0 +1,63 @@
+# [docs](index.md) » cp.rx.Observer
+---
+
+Observers are simple objects that receive values from [Observables](cp.rx.Observables.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [onCompleted](#oncompleted)
+ * [onError](#onerror)
+ * [onNext](#onnext)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.rx.Observer.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Tests if the `thing` is an `Observer`. |
+| **Parameters** | - thing - The thing to test.
|
+| **Returns** | true if the thing is an Observer, otherwise false.
|
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.Observer.create(onNext, onError, onCompleted) -> cp.rx.Observer` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Observer. |
+| **Parameters** | - onNext - Called when the Observable produces a value.
- onError - Called when the Observable terminates due to an error.
- onCompleted - Called when the Observable completes normally.
|
+| **Returns** | |
+
+### Methods
+
+#### [onCompleted](#oncompleted)
+| **Signature** | `cp.rx.Observer:onCompleted() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Notify the Observer that the sequence has completed and will produce no more values. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [onError](#onerror)
+| **Signature** | `cp.rx.Observer:onError(message) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Notify the Observer that an error has occurred. |
+| **Parameters** | - message - A string describing what went wrong.
|
+| **Returns** | |
+
+#### [onNext](#onnext)
+| **Signature** | `cp.rx.Observer:onNext(...) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes zero or more values to the Observer. |
+| **Parameters** | - ... - The list of values to send.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.Reference.md b/api/cp/cp.rx.Reference.md
new file mode 100644
index 0000000..f5e40f8
--- /dev/null
+++ b/api/cp/cp.rx.Reference.md
@@ -0,0 +1,34 @@
+# [docs](index.md) » cp.rx.Reference
+---
+
+A handle representing the link between an [Observer](cp.rx.Observer.md) and an [Observable](cp.rx.Observable.md), as well as any
+work required to clean up after the Observable completes or the Observer cancels.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [cancel](#cancel)
+
+## API Documentation
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.Reference.create(action) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Reference. |
+| **Parameters** | - action - The action to run when the reference is canceld. It will only be run once.
|
+| **Returns** | |
+
+### Methods
+
+#### [cancel](#cancel)
+| **Signature** | `cp.rx.Reference:cancel() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Unsubscribes the reference, performing any necessary cleanup work. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.RelaySubject.md b/api/cp/cp.rx.RelaySubject.md
new file mode 100644
index 0000000..da6b495
--- /dev/null
+++ b/api/cp/cp.rx.RelaySubject.md
@@ -0,0 +1,42 @@
+# [docs](index.md) » cp.rx.RelaySubject
+---
+
+A [Subject](cp.rx.Subject.md) that provides new [Observers](cp.rx.Observer.md) with some or all of the most recently
+produced values upon reference.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [create](#create)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [onNext](#onnext)
+ * [subscribe](#subscribe)
+
+## API Documentation
+
+### Constructors
+
+#### [create](#create)
+| **Signature** | `cp.rx.RelaySubject.create([n]) -> cp.rx.RelaySubject` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ReplaySubject`. |
+| **Parameters** | - bufferSize - The number of values to send to new subscribers. If
nil, an infinite buffer is used (note that this could lead to memory issues).
|
+| **Returns** | |
+
+### Methods
+
+#### [onNext](#onnext)
+| **Signature** | `cp.rx.RelaySubject:onNext(...) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes zero or more values to the `ReplaySubject`. They will be broadcasted to all [Observers](cp.rx.Observer.md). |
+| **Parameters** | - ... - The values to send.
|
+
+#### [subscribe](#subscribe)
+| **Signature** | `cp.rx.RelaySubject:subscribe([observer | onNext[, onError[, onCompleted]]]) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new [Observer](cp.rx.Observer.md) and attaches it to the `ReplaySubject`. |
+| **Parameters** | - observer | onNext - Either an Observer, or a
function to call when the ReplaySubject produces a value. - onError - A
function to call when the ReplaySubject terminates due to an error. - onCompleted - A
function to call when the ReplaySubject completes normally.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.Subject.md b/api/cp/cp.rx.Subject.md
new file mode 100644
index 0000000..b6d6f07
--- /dev/null
+++ b/api/cp/cp.rx.Subject.md
@@ -0,0 +1,46 @@
+# [docs](index.md) » cp.rx.Subject
+---
+
+`Subjects` function both as an [Observer](cp.rs.Observer.md) and as an [Observable](cp.rx.Observable.md). Subjects inherit all
+`Observable` functions, including [subscribe](#subscribe). Values can also be pushed to the `Subject`, which will
+be broadcasted to any subscribed [Observers](cp.rx.Observers.md).
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [onCompleted](#oncompleted)
+ * [onError](#onerror)
+ * [onNext](#onnext)
+ * [subscribe](#subscribe)
+
+## API Documentation
+
+### Methods
+
+#### [onCompleted](#oncompleted)
+| **Signature** | `cp.rx.Subject:onCompleted() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Signal to all [Observers](cp.rx.Observer.md) that the `Subject` will not produce any more values. |
+
+#### [onError](#onerror)
+| **Signature** | `cp.rx.Subject:onError(message) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Signal to all `Observers` that an error has occurred. |
+| **Parameters** | - message - A string describing what went wrong.
|
+
+#### [onNext](#onnext)
+| **Signature** | `cp.rx.Subject:onNext(...) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Pushes zero or more values to the `Subject`. They will be broadcasted to all [Observers](cp.rx.Observer.md). |
+| **Parameters** | - ... - The values to send.
|
+
+#### [subscribe](#subscribe)
+| **Signature** | `cp.rx.Subject:subscribe(onNext[, onError[, onCompleted]]) -> cp.rx.Reference` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new [Observer](cp.rx.Observer.md) and attaches it to the Subject. |
+| **Parameters** | - observer | onNext - Either an Observer, or a
function called when the Subject produces a value. - onError - A
function called when the Subject terminates due to an error. - onCompleted - A
function called when the Subject completes normally.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.TimeoutScheduler.md b/api/cp/cp.rx.TimeoutScheduler.md
new file mode 100644
index 0000000..002c5c4
--- /dev/null
+++ b/api/cp/cp.rx.TimeoutScheduler.md
@@ -0,0 +1,36 @@
+# [docs](index.md) » cp.rx.TimeoutScheduler
+---
+
+A scheduler that uses the `hs.timer` library to schedule events on an event loop.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [create](#create)
+ * [schedule](#schedule)
+ * [stopAll](#stopall)
+
+## API Documentation
+
+### Methods
+
+#### [create](#create)
+| **Signature** | `cp.rx.TimeoutScheduler.create() -> cp.rx.TimeoutScheduler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new `TimeoutScheduler`. |
+| **Returns** | - The new
TimeoutScheduler.
|
+
+#### [schedule](#schedule)
+| **Signature** | `cp.rx.TimeoutScheduler:schedule(action[, delay]) -> cp.rx.TimeoutScheduler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Schedules an action to run at a future point in time. |
+| **Parameters** | - action - The action to run.
- delay - The delay, in milliseconds. Defaults to
0.
|
+| **Returns** | |
+
+#### [stopAll](#stopall)
+| **Signature** | `cp.rx.TimeoutScheduler:stopAll() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Stops all future timers from running and clears them. |
+
diff --git a/api/cp/cp.rx.go.Do.Then.md b/api/cp/cp.rx.go.Do.Then.md
new file mode 100644
index 0000000..8182dfa
--- /dev/null
+++ b/api/cp/cp.rx.go.Do.Then.md
@@ -0,0 +1,39 @@
+# [docs](index.md) » cp.rx.go.Do.Then
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) of [Do](cp.rx.go.Do.md)
+that defines what happens after the `Do` values resolve.
+
+For example:
+
+```lua
+Do(anObservable):Then(Observable.of(1, 2, 3))
+```
+
+If a parameter is a `function`, it will be passed the results of the previous `Do` or `Then` parameters.
+
+For example:
+```lua
+Do(anObservable, anotherObservable)
+:Then(function(aResult, anotherResult)
+ doSomethingWith(aResult, anotherResult)
+ return true
+end)
+```
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.Do.Then:Then(...) -> Do.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Allows another set of `resolvables` to be processed after a `Then` has resolved. |
+| **Parameters** | - ... - The list of
resolvable values to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Do.md b/api/cp/cp.rx.go.Do.md
new file mode 100644
index 0000000..e604de8
--- /dev/null
+++ b/api/cp/cp.rx.go.Do.md
@@ -0,0 +1,56 @@
+# [docs](index.md) » cp.rx.go.Do
+---
+
+A [Statement](cp.rx.go.Statement.md) that will execute the provided `resolvable` values.
+This will resolve the provided values into [Observables](cp.rx.Observable.md) and pass on the
+first result of each to the next stage as individual parameters.
+This will continue until one of the `Observables` has completed, at which
+point other results from values are ignored.
+
+For example:
+
+```lua
+Do(Observable.of(1, 2, 3), Observable.of("a", "b"))
+:Now(function(number, letter) print(tostring(number)..letter))
+```
+
+This will result in:
+
+```
+1a
+2b
+```
+
+For more power, you can add a [Then](#Then) to futher modify the results, or chain other operations.
+
+## Submodules
+ * [cp.rx.go.Do.Then](cp.rx.go.Do.Then.md)
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Do](#do)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Constructors
+
+#### [Do](#do)
+| **Signature** | `cp.rx.go.Do(...) -> Do` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Begins the definition of a `Do` `Statement`. |
+| **Parameters** | - ... - the list of
resolvable values to evaluate.
|
+| **Returns** | - A new
Do Statement instance.
|
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.Do:Then(...) -> Do.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call this to define what will happen once the `Do` values resolve successfully. |
+| **Parameters** | - ... - The list of
resolveable values to process for each Do result.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Done.md b/api/cp/cp.rx.go.Done.md
new file mode 100644
index 0000000..ba219e4
--- /dev/null
+++ b/api/cp/cp.rx.go.Done.md
@@ -0,0 +1,27 @@
+# [docs](index.md) » cp.rx.go.Done
+---
+
+A [Statement](cp.rx.go.Statement.md) that will complete without sending any values.
+
+Example:
+
+```lua
+Done()
+```
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Done](#done)
+
+## API Documentation
+
+### Constructors
+
+#### [Done](#done)
+| **Signature** | `cp.rx.go.Done() -> Done` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Done` `Statement` that will complete without sending any values. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will complete immediately.
|
+
diff --git a/api/cp/cp.rx.go.First.md b/api/cp/cp.rx.go.First.md
new file mode 100644
index 0000000..6f79926
--- /dev/null
+++ b/api/cp/cp.rx.go.First.md
@@ -0,0 +1,23 @@
+# [docs](index.md) » cp.rx.go.First
+---
+
+_Extends:_ [Statement](cp.rx.go.Statement.md)
+
+A [Statement](cp.rx.go.Statement.md) that will complete after the first result resolves.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [First](#first)
+
+## API Documentation
+
+### Constructors
+
+#### [First](#first)
+| **Signature** | `cp.rx.go.First(resolvable) -> First` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `First` `Statement` that will return the first value from the `resolvable` and complete. |
+| **Parameters** | - resolvable - a
resolvable value, of which the first result will be returned.
|
+| **Returns** | - The
Statement which will return the first value when executed.
|
+
diff --git a/api/cp/cp.rx.go.Given.Then.md b/api/cp/cp.rx.go.Given.Then.md
new file mode 100644
index 0000000..f7db20c
--- /dev/null
+++ b/api/cp/cp.rx.go.Given.Then.md
@@ -0,0 +1,28 @@
+# [docs](index.md) » cp.rx.go.Given.Then
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) of [Given](cp.rx.go.Given.md)
+that defines what happens after the `Given` values resolve.
+
+For example:
+
+```lua
+Given(anObservable):Then(function(value) return value:doSomething() end)
+```
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.Given.Then:Then(...) -> Given.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Allows another set of `resolvables` to be processed after a `Then` has resolved. |
+| **Parameters** | - ... - The list of
resolvable values to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Given.md b/api/cp/cp.rx.go.Given.md
new file mode 100644
index 0000000..83cf391
--- /dev/null
+++ b/api/cp/cp.rx.go.Given.md
@@ -0,0 +1,40 @@
+# [docs](index.md) » cp.rx.go.Given
+---
+
+A [Statement](cp.rx.go.Statement.md) that will execute the provided `resolvable` values.
+This will resolve the provided values into [Observables](cp.rx.Observable.md) and pass on the
+first result of each to the next stage as individual parameters.
+This will continue until one of the `Observables` has completed, at which
+point other results from values are ignored.
+
+## Submodules
+ * [cp.rx.go.Given.Then](cp.rx.go.Given.Then.md)
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Given](#given)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Constructors
+
+#### [Given](#given)
+| **Signature** | `cp.rx.go.Given(...) -> Given` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Begins the definition of a `Given` `Statement`. |
+| **Parameters** | - ... - the list of
resolvable values to evaluate.
|
+| **Returns** | - A new
Given Statement instance.
|
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.Given:Then(...) -> Given.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call this to define what will happen once the `Given` values resolve successfully. |
+| **Parameters** | - ... - The list of
resolveable values to process for each Given result.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.Are.md b/api/cp/cp.rx.go.If.Are.md
new file mode 100644
index 0000000..ed877fd
--- /dev/null
+++ b/api/cp/cp.rx.go.If.Are.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.If.Are
+---
+
+A [Statement.Modifier] of [If](cp.rx.go.If.md) that sets the values to match.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.Are:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what happens after the [If](cp.rx.go.If.md) test passes. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.AreNot.md b/api/cp/cp.rx.go.If.AreNot.md
new file mode 100644
index 0000000..696331f
--- /dev/null
+++ b/api/cp/cp.rx.go.If.AreNot.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.If.AreNot
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) for [If](cp.rx.go.If.md) that sets the values to *not* match.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.AreNot:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what happens after the [If](cp.rx.go.If.md) test passes. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.Is.md b/api/cp/cp.rx.go.If.Is.md
new file mode 100644
index 0000000..fb35f8e
--- /dev/null
+++ b/api/cp/cp.rx.go.If.Is.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.If.Is
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) for [If](cp.rx.go.If.md) that sets a specific value to match.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.Is:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what happens after the [If](cp.rx.go.If.md) test passes. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.IsNot.md b/api/cp/cp.rx.go.If.IsNot.md
new file mode 100644
index 0000000..3db5e8c
--- /dev/null
+++ b/api/cp/cp.rx.go.If.IsNot.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.If.IsNot
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) for [If](cp.rx.go.If.md) that sets a specific value to *not* match.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.IsNot:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what happens after the [If](cp.rx.go.If.md) test passes. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.Matches.md b/api/cp/cp.rx.go.If.Matches.md
new file mode 100644
index 0000000..788756a
--- /dev/null
+++ b/api/cp/cp.rx.go.If.Matches.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.If.Matches
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) for [If](cp.rx.go.If.md) that sets a predicate check values against.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.Matches:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what happens after the [If](cp.rx.go.If.md) test passes. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.Then.Otherwise.Then.md b/api/cp/cp.rx.go.If.Then.Otherwise.Then.md
new file mode 100644
index 0000000..c9e0c2d
--- /dev/null
+++ b/api/cp/cp.rx.go.If.Then.Otherwise.Then.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.If.Then.Otherwise.Then
+---
+
+Each [Otherwise](cp.rx.go.If.Then.Otherwise.md) can have a subsequent `Then` which will be executed after the previous one resolves.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Then](#then)
+
+## API Documentation
+
+### Methods
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.Then.Otherwise.Then:Then(...) -> If.Then.Otherwise.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies additional `resolvables` to resolve after the previous `Then`. |
+| **Parameters** | - ... - The list of
resolvable values.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.Then.Otherwise.md b/api/cp/cp.rx.go.If.Then.Otherwise.md
new file mode 100644
index 0000000..7a70da1
--- /dev/null
+++ b/api/cp/cp.rx.go.If.Then.Otherwise.md
@@ -0,0 +1,12 @@
+# [docs](index.md) » cp.rx.go.If.Then.Otherwise
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) of [If](cp.rx.go.If.md), which should be created via `If:Then(...):Otherwise(...)`.
+
+## Submodules
+ * [cp.rx.go.If.Then.Otherwise.Then](cp.rx.go.If.Then.Otherwise.Then.md)
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.rx.go.If.Then.md b/api/cp/cp.rx.go.If.Then.md
new file mode 100644
index 0000000..970683d
--- /dev/null
+++ b/api/cp/cp.rx.go.If.Then.md
@@ -0,0 +1,43 @@
+# [docs](index.md) » cp.rx.go.If.Then
+---
+
+A `Statement.Modifier` that defines what happens when an `If` matches.
+
+## Submodules
+ * [cp.rx.go.If.Then.Otherwise](cp.rx.go.If.Then.Otherwise.md)
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [Then](#then)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Otherwise](#otherwise)
+ * [Then](#then)
+
+## API Documentation
+
+### Constants
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.Then ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | This is a configuration of `If`, which should be created via `If:Then(...)`. |
+
+### Methods
+
+#### [Otherwise](#otherwise)
+| **Signature** | `cp.rx.go.If.Then:Otherwise(...) -> If.Then.Otherwise` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call this to define what will happen if value doesn't resolve successfully. |
+| **Parameters** | - ... - The list of
resolveable values to process for the unsuccessful If result.
|
+| **Returns** | - The
Then Statement.Modifier.
|
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If.Then:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Each [Then](cp.rx.go.If.Then.md) can have a subsequent `Then` which will be executed after the previous one resolves. |
+| **Parameters** | - ... - The list of
resolvable values to process for the sucessful If result.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.If.md b/api/cp/cp.rx.go.If.md
new file mode 100644
index 0000000..b15ee59
--- /dev/null
+++ b/api/cp/cp.rx.go.If.md
@@ -0,0 +1,86 @@
+# [docs](index.md) » cp.rx.go.If
+---
+
+A `Statement` that will check if a `resolvable` matches a predicate, then executes other `resolvables`.
+
+## Submodules
+ * [cp.rx.go.If.Are](cp.rx.go.If.Are.md)
+ * [cp.rx.go.If.AreNot](cp.rx.go.If.AreNot.md)
+ * [cp.rx.go.If.Is](cp.rx.go.If.Is.md)
+ * [cp.rx.go.If.IsNot](cp.rx.go.If.IsNot.md)
+ * [cp.rx.go.If.Matches](cp.rx.go.If.Matches.md)
+ * [cp.rx.go.If.Then](cp.rx.go.If.Then.md)
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [If](#if)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Are](#are)
+ * [AreNot](#arenot)
+ * [Is](#is)
+ * [IsNot](#isnot)
+ * [Matches](#matches)
+ * [Then](#then)
+
+## API Documentation
+
+### Constructors
+
+#### [If](#if)
+| **Signature** | `cp.rx.go.If(value) -> If` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `If` `Statement` which will check the first result of `value`. |
+| **Parameters** | - requirement - a
resolvable value that will be checked.
|
+| **Returns** | - The
Statement instance which will check if the resolvable matches the requirement.
|
+
+### Methods
+
+#### [Are](#are)
+| **Signature** | `cp.rx.go.If:Are(value) -> If.Are` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value to wait for.
|
+| **Returns** | |
+
+#### [AreNot](#arenot)
+| **Signature** | `cp.rx.go.If:AreNot(value) -> If.AreNot` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value to not match.
|
+| **Returns** | |
+
+#### [Is](#is)
+| **Signature** | `cp.rx.go.If:Is(value) -> If.Is` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value to check for.
|
+| **Returns** | |
+
+#### [IsNot](#isnot)
+| **Signature** | `cp.rx.go.If:IsNot(value) -> If.IsNot` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to not match. |
+| **Parameters** | - value - The value to check for.
|
+| **Returns** | |
+
+#### [Matches](#matches)
+| **Signature** | `cp.rx.go.If:Matches(predicate) -> If.Matches` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the predicate function that will check the `value` results. |
+| **Parameters** | - predicate - The function that will get called to determine if it has been found.
|
+| **Returns** | |
+
+#### [Then](#then)
+| **Signature** | `cp.rx.go.If:Then(...) -> If.Then` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call this to define what will happen if value resolves successfully. |
+| **Parameters** | - ... - The list of
resolveable values to process for the successful If result.
|
+| **Returns** | - The
Then Statement.Modifier.
|
+
diff --git a/api/cp/cp.rx.go.Last.md b/api/cp/cp.rx.go.Last.md
new file mode 100644
index 0000000..1977d02
--- /dev/null
+++ b/api/cp/cp.rx.go.Last.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.rx.go.Last
+---
+
+A `Statement` that will complete after the only the last result resolves.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Last](#last)
+
+## API Documentation
+
+### Constructors
+
+#### [Last](#last)
+| **Signature** | `cp.rx.go.Last(resolvable) -> Last` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Last` `Statement` that will return the first value from the `resolvable` and complete. |
+| **Parameters** | - resolvable - a
resolvable value, of which the first result will be returned.
|
+| **Returns** | - The
Statement which will return the first value when executed.
|
+
diff --git a/api/cp/cp.rx.go.List.Sorted.md b/api/cp/cp.rx.go.List.Sorted.md
new file mode 100644
index 0000000..1346b23
--- /dev/null
+++ b/api/cp/cp.rx.go.List.Sorted.md
@@ -0,0 +1,19 @@
+# [docs](index.md) » cp.rx.go.List.Sorted
+---
+
+A `Statement.Modifier` that specifies the list should be sorted by its 'natural' order - that is `a < b`.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [Sorted](#sorted)
+
+## API Documentation
+
+### Constants
+
+#### [Sorted](#sorted)
+| **Signature** | `cp.rx.go.List.Sorted ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | This is a configuration of `List`, which should be created via `List:Sorted()`. |
+
diff --git a/api/cp/cp.rx.go.List.SortedBy.md b/api/cp/cp.rx.go.List.SortedBy.md
new file mode 100644
index 0000000..ba251be
--- /dev/null
+++ b/api/cp/cp.rx.go.List.SortedBy.md
@@ -0,0 +1,19 @@
+# [docs](index.md) » cp.rx.go.List.SortedBy
+---
+
+A `Statement.Modifier` that specifies the list should be sorted by the specified `function`.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [SortedBy](#sortedby)
+
+## API Documentation
+
+### Constants
+
+#### [SortedBy](#sortedby)
+| **Signature** | `cp.rx.go.List.SortedBy ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | This is a configuration of `List`, which should be created via `List:SortedBy(...)`. |
+
diff --git a/api/cp/cp.rx.go.List.md b/api/cp/cp.rx.go.List.md
new file mode 100644
index 0000000..e7ac54d
--- /dev/null
+++ b/api/cp/cp.rx.go.List.md
@@ -0,0 +1,48 @@
+# [docs](index.md) » cp.rx.go.List
+---
+
+_Extends:_ [Statement](cp.rx.go.Statement.md)
+
+A [Statement](cp.rx.go.Statement.md) that will loop through a table as a list from item `1` to the table length.
+
+## Submodules
+ * [cp.rx.go.List.Sorted](cp.rx.go.List.Sorted.md)
+ * [cp.rx.go.List.SortedBy](cp.rx.go.List.SortedBy.md)
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [List](#list)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Sorted](#sorted)
+ * [SortedBy](#sortedby)
+
+## API Documentation
+
+### Constructors
+
+#### [List](#list)
+| **Signature** | `cp.rx.go.List(values) -> List` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `List` `Statement` that will loop through the provided table as a list. |
+| **Parameters** | - values - a
table value, or a function which returns a table.
|
+| **Returns** | - The
Statement which will return the first value when executed.
|
+
+### Methods
+
+#### [Sorted](#sorted)
+| **Signature** | `cp.rx.go.List:Sorted() -> List.Sorted` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates the List should be sorted by its natural order before being sent out individually. |
+| **Parameters** | |
+| **Returns** | - The
Sorted Statement.Modifier.
|
+
+#### [SortedBy](#sortedby)
+| **Signature** | `cp.rx.go.List:SortedBy(...) -> List.SortedBy` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates the List should be sorted by the provided `function`. |
+| **Parameters** | |
+| **Returns** | - The
SortedBy Statement.Modifier.
|
+
diff --git a/api/cp/cp.rx.go.Require.Are.md b/api/cp/cp.rx.go.Require.Are.md
new file mode 100644
index 0000000..e6bc35f
--- /dev/null
+++ b/api/cp/cp.rx.go.Require.Are.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.rx.go.Require.Are
+---
+
+Specifies that the `Require`d values `Are` a specific value.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [Are](#are)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [OrThrow](#orthrow)
+
+## API Documentation
+
+### Constants
+
+#### [Are](#are)
+| **Signature** | `cp.rx.go.Require.Are ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a specific value all values from the `requirement` must match. |
+
+### Methods
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require.Are:OrThrow(...) -> Require.OrThrow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what is thrown if the [Require](cp.rx.go.Require.md) test fails. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Require.AreNot.md b/api/cp/cp.rx.go.Require.AreNot.md
new file mode 100644
index 0000000..71dc037
--- /dev/null
+++ b/api/cp/cp.rx.go.Require.AreNot.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.rx.go.Require.AreNot
+---
+
+Specifies that the `Require`d values `AreNot` a specific value.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [AreNot](#arenot)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [OrThrow](#orthrow)
+
+## API Documentation
+
+### Constants
+
+#### [AreNot](#arenot)
+| **Signature** | `cp.rx.go.Require.AreNot ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a specific value all values from the `requirement` must not match. |
+
+### Methods
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require.AreNot:OrThrow(...) -> Require.OrThrow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what is thrown if the [Require](cp.rx.go.Require.md) test fails. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Require.Is.md b/api/cp/cp.rx.go.Require.Is.md
new file mode 100644
index 0000000..ffeafcf
--- /dev/null
+++ b/api/cp/cp.rx.go.Require.Is.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.rx.go.Require.Is
+---
+
+Specifies that the `Require`d value `Is` a specific value.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [Is](#is)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [OrThrow](#orthrow)
+
+## API Documentation
+
+### Constants
+
+#### [Is](#is)
+| **Signature** | `cp.rx.go.Require.Is ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a specific value all values from the `requirement` must match. |
+
+### Methods
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require.Is:OrThrow(...) -> Require.OrThrow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what is thrown if the [Require](cp.rx.go.Require.md) test fails. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Require.IsNot.md b/api/cp/cp.rx.go.Require.IsNot.md
new file mode 100644
index 0000000..1b361d2
--- /dev/null
+++ b/api/cp/cp.rx.go.Require.IsNot.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.rx.go.Require.IsNot
+---
+
+Specifies that the `Require`d value `IsNot` a specific value.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [IsNot](#isnot)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [OrThrow](#orthrow)
+
+## API Documentation
+
+### Constants
+
+#### [IsNot](#isnot)
+| **Signature** | `cp.rx.go.Require.IsNot ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a specific value all values from the `requirement` must not match. |
+
+### Methods
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require.IsNot:OrThrow(...) -> Require.OrThrow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what is thrown if the [Require](cp.rx.go.Require.md) test fails. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Require.Matches.md b/api/cp/cp.rx.go.Require.Matches.md
new file mode 100644
index 0000000..47be1ef
--- /dev/null
+++ b/api/cp/cp.rx.go.Require.Matches.md
@@ -0,0 +1,31 @@
+# [docs](index.md) » cp.rx.go.Require.Matches
+---
+
+Specifies that the `Require`d value `Matches` a function predicate.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [Matches](#matches)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [OrThrow](#orthrow)
+
+## API Documentation
+
+### Constants
+
+#### [Matches](#matches)
+| **Signature** | `cp.rx.go.Require.Matches ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a predicate function that checks values from the `requirement`. |
+
+### Methods
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require.Matches:OrThrow(...) -> Require.OrThrow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies what is thrown if the [Require](cp.rx.go.Require.md) test fails. |
+| **Parameters** | - ... - The list of
resolvable items to process.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Require.md b/api/cp/cp.rx.go.Require.md
new file mode 100644
index 0000000..04a1f6b
--- /dev/null
+++ b/api/cp/cp.rx.go.Require.md
@@ -0,0 +1,96 @@
+# [docs](index.md) » cp.rx.go.Require
+---
+
+A `Statement` that will require that the `resolvable` value matches a predicate,
+and if not, it will send an error.
+
+## Submodules
+ * [cp.rx.go.Require.Are](cp.rx.go.Require.Are.md)
+ * [cp.rx.go.Require.AreNot](cp.rx.go.Require.AreNot.md)
+ * [cp.rx.go.Require.Is](cp.rx.go.Require.Is.md)
+ * [cp.rx.go.Require.IsNot](cp.rx.go.Require.IsNot.md)
+ * [cp.rx.go.Require.Matches](cp.rx.go.Require.Matches.md)
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [OrThrow](#orthrow)
+* Functions - API calls offered directly by the extension
+ * [Require](#require)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Are](#are)
+ * [AreNot](#arenot)
+ * [Is](#is)
+ * [IsNot](#isnot)
+ * [Matches](#matches)
+ * [OrThrow](#orthrow)
+
+## API Documentation
+
+### Constants
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require.OrThrow ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets the message to throw if the requirement is not met. |
+
+### Functions
+
+#### [Require](#require)
+| **Signature** | `cp.rx.go.Require(requirement) -> Require` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `Require` `Statement` with the specified `requirement`. |
+| **Parameters** | - requirement - a
resolvable value that will be checked.
|
+| **Returns** | - The
Statement instance which will check if the requirement matches the requirement.
|
+
+### Methods
+
+#### [Are](#are)
+| **Signature** | `cp.rx.go.Require:Are(value) -> Require.Are` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value that all results from the
requirement must match.
|
+| **Returns** | - The
Are Statement.Modifier.
|
+
+#### [AreNot](#arenot)
+| **Signature** | `cp.rx.go.Require:AreNot(value) -> Require.AreNot` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value that all results from the
requirement must match.
|
+| **Returns** | - The
AreNot Statement.Modifier.
|
+
+#### [Is](#is)
+| **Signature** | `cp.rx.go.Require:Is(value) -> Require.Is` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value that all results from the
requirement must match.
|
+| **Returns** | - The
Is Statement.Modifier.
|
+
+#### [IsNot](#isnot)
+| **Signature** | `cp.rx.go.Require:IsNot(value) -> Require.IsNot` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value that all results from the
requirement must not match.
|
+| **Returns** | - The
IsNot Statement.Modifier.
|
+
+#### [Matches](#matches)
+| **Signature** | `cp.rx.go.Require:Matches(predicate) -> Require.Matches` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the predicate to check. |
+| **Parameters** | - value - The value that all results from the
requirement must not match.
|
+| **Returns** | - The
Matches Statement.Modifier.
|
+
+#### [OrThrow](#orthrow)
+| **Signature** | `cp.rx.go.Require:OrThrow(message) -> Require.OrThrow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the message to throw if the requirement is not met. |
+| **Parameters** | - message - The string to throw when there is an error.
|
+| **Returns** | - The
OrThrow Statement.Modifier.
|
+
diff --git a/api/cp/cp.rx.go.Retry.md b/api/cp/cp.rx.go.Retry.md
new file mode 100644
index 0000000..ebd8e69
--- /dev/null
+++ b/api/cp/cp.rx.go.Retry.md
@@ -0,0 +1,62 @@
+# [docs](index.md) » cp.rx.go.Retry
+---
+
+_Extends:_ [Statement](cp.rx.go.Statement.md)
+
+A [Statement](cp.rx.go.Statement.md) that will retry the contained statement if there is an error.
+It can be limited to a set number of retries, and have a delay added between retries.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [DelayedBy](#delayedby)
+ * [UpTo](#upto)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Retry](#retry)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [DelayedBy](#delayedby)
+ * [UpTo](#upto)
+
+## API Documentation
+
+### Constants
+
+#### [DelayedBy](#delayedby)
+| **Signature** | `cp.rx.go.Retry.DelayedBy ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets the delay between retries. |
+
+#### [UpTo](#upto)
+| **Signature** | `cp.rx.go.Retry.UpTo ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets the number of times to retry. |
+
+### Constructors
+
+#### [Retry](#retry)
+| **Signature** | `cp.rx.go.Retry(resolvable) -> Retry` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Retry` `Statement` that will retry the `resolveable` if it emits an error. |
+| **Parameters** | - resolvable - a
resolvable value, which will be retried if it sends an error signal.
|
+| **Returns** | |
+
+### Methods
+
+#### [DelayedBy](#delayedby)
+| **Signature** | `cp.rx.go.Retry:DelayedBy(milliseconds[, scheduler]) -> Retry.DelayedBy` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specify a time in millieconds to delay by. |
+| **Parameters** | - milliseconds - The amount of time do delay between retries.
- scheduler - The scheduler to use. Defaults to
cp.rx.util.defaultScheduler().
|
+| **Returns** | - The
DelayedBy Statement.Modifier.
|
+
+#### [UpTo](#upto)
+| **Signature** | `cp.rx.go.Retry:UpTo(count) -> Retry.UpTo` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the number of times to retry up to. |
+| **Parameters** | - count - The number of times to retry.
|
+| **Returns** | - The
UpTo Statement.Modifier.
|
+
diff --git a/api/cp/cp.rx.go.Statement.Definition.md b/api/cp/cp.rx.go.Statement.Definition.md
new file mode 100644
index 0000000..c8b76f7
--- /dev/null
+++ b/api/cp/cp.rx.go.Statement.Definition.md
@@ -0,0 +1,52 @@
+# [docs](index.md) » cp.rx.go.Statement.Definition
+---
+
+A [Statement](cp.rx.go.Statement.md) is defined before being executable.
+A definition is initiated with the [Statement:modifier(...)](cp.rx.go.Statement.md#modifer) method.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [define](#define)
+ * [onInit](#oninit)
+ * [onObservable](#onobservable)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.rx.go.Statement.Definition.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is an instance of `Statement.Definition`. |
+| **Parameters** | - thing - The thing to check.
|
+| **Returns** | true if the thing is a Statement.Definition.
|
+
+### Methods
+
+#### [define](#define)
+| **Signature** | `cp.rx.go.Statement.Definition:define() -> Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Completes the definition of the [Statement](cp.rx.go.Statement.md). |
+| **Parameters** | |
+| **Returns** | |
+
+#### [onInit](#oninit)
+| **Signature** | `cp.rx.go.Statement.Definition:onInit(initFn) -> Statement.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Defines the function which will be called to initialise the context. |
+| **Parameters** | - initFn - The init function.
|
+| **Returns** | |
+
+#### [onObservable](#onobservable)
+| **Signature** | `cp.rx.go.Statement.Definition:onObservable(observableFn) -> Statement.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Defines the function which will be called to create the [Observable](cp.rx.Observable.md) |
+| **Parameters** | - observableFn - The observable creator function.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Statement.Modifier.Definition.md b/api/cp/cp.rx.go.Statement.Modifier.Definition.md
new file mode 100644
index 0000000..16763b8
--- /dev/null
+++ b/api/cp/cp.rx.go.Statement.Modifier.Definition.md
@@ -0,0 +1,35 @@
+# [docs](index.md) » cp.rx.go.Statement.Modifier.Definition
+---
+
+A [Statement.Modifier](cp.rx.go.Statement.Modifier.md) is defined before being executable.
+It is an extension of [Statement.Definition](cp.rx.go.Statement.Definition.md) and inherits
+all of it's methods also.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [define](#define)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.rx.go.Statement.Modifier.Definition.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Statement.Modifier.Definition`. |
+| **Parameters** | - thing - The thing to check.
|
+| **Returns** | true if the thing is a Statement.Modifier.Definition.
|
+
+### Methods
+
+#### [define](#define)
+| **Signature** | `cp.rx.go.Statement.Modifier.Definition:define()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Defines the `Statement.Modifier`. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Statement.Modifier.md b/api/cp/cp.rx.go.Statement.Modifier.md
new file mode 100644
index 0000000..66f1bc1
--- /dev/null
+++ b/api/cp/cp.rx.go.Statement.Modifier.md
@@ -0,0 +1,48 @@
+# [docs](index.md) » cp.rx.go.Statement.Modifier
+---
+
+A `Statement.Modifier` is an extension to a [Statement](cp.rx.go.Statement.md) that provides additional configuration details.
+They are initiated via the [modifier](#modifier) method of a defined [Statement](cp.rx.go.Statement.md).
+
+All `Statement.Modifier` instances will also have the methods defined by [Statement](cp.rx.go.Statement.md).
+
+## Submodules
+ * [cp.rx.go.Statement.Modifier.Definition](cp.rx.go.Statement.Modifier.Definition.md)
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [context](#context)
+ * [toObservable](#toobservable)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.rx.go.Statement.Modifier.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Statement.Modifier`. |
+| **Parameters** | - thing - The thing to check.
|
+| **Returns** | true if the thing is a Statement.Modifier.
|
+
+### Methods
+
+#### [context](#context)
+| **Signature** | `cp.rx.go.Statement.Modifier:context() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `context` table for the `Statement.Modifier`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [toObservable](#toobservable)
+| **Signature** | `cp.rx.go.Statement.Modifier:toObservable() -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new `Observable` instance for the current configuration. |
+| **Parameters** | |
+| **Returns** | - The new
Observable instance.
|
+
diff --git a/api/cp/cp.rx.go.Statement.md b/api/cp/cp.rx.go.Statement.md
new file mode 100644
index 0000000..419128c
--- /dev/null
+++ b/api/cp/cp.rx.go.Statement.md
@@ -0,0 +1,231 @@
+# [docs](index.md) » cp.rx.go.Statement
+---
+
+A `Statement` is defined to enable processing of asynchronous `resolvable` values such
+as [cp.rx.Observable](cp.rx.Observable.md) values.
+
+To define a new `Statement`, you call the [named](#named) constructor, assigning the result
+to a constant value and calling the [define](#define) method.
+
+## Definine a new Statement
+
+To define a new `Statement` implementation, we use the [Statement.named](cp.rx.go.Statement.md#named) constructor.
+This gives us a [Statement.Definition](cp.rx.go.Statement.Definition.md) which allows
+us to set the rules for the statement before finally "defining" it.
+
+Statements *may* have an `onInit`, and *must* have an `onObservable` provided,
+and then the `define` method must be called.
+
+For example, the [First](cp.rx.go.First.md) statement is defined like so:
+
+```lua
+local First = Statement.named("First")
+:onInit(function(context, resolvable)
+ assert(resolvable ~= nil, "The First `resolveable` may not be `nil`.")
+ context.resolvable = resolvable
+end)
+:onObservable(function(context)
+ return toObservable(context.resolvable):first()
+end)
+:define()
+```
+
+Once you've defined a statement, you then execute it by calling the statement directly, passing
+in any parameters.
+
+For example:
+```lua
+local First = require("cp.rx.go").First
+First(Observable.of(1, 2, 3))
+:Now(
+ function(value) print("Received: "..tostring(value)) end,
+ function(message) print("Error: "..tostring(message)) end,
+ function() print("Completed") end
+)
+```
+
+This will output:
+```
+Received: 1
+Completed
+```
+
+The `Observable` as passed to the `onInit` function handler as the second parameter.
+`context` is always the first parameter, followed by any values passed to the constructor call.
+
+The `onObservable` function handler is called once the statement is actually executing, typically
+by calling the [Now](cp.rx.go.Statement.md#Now) or [After](cp.rx.go.Statement.md#After) methods.
+
+> It is recommended that any conversion of input parameters are converted to `Observable`s as
+> late as possible, typically in the `onObservable` function handler. Otherwise, input values
+> may get resolved before the user intends.
+
+## Submodules
+ * [cp.rx.go.Statement.Definition](cp.rx.go.Statement.Definition.md)
+ * [cp.rx.go.Statement.Modifier](cp.rx.go.Statement.Modifier.md)
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [defaultObserverFactory](#defaultobserverfactory)
+ * [is](#is)
+ * [toObservable](#toobservable)
+ * [toObservables](#toobservables)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [named](#named)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [After](#after)
+ * [Catch](#catch)
+ * [Debug](#debug)
+ * [Finally](#finally)
+ * [fullName](#fullname)
+ * [Label](#label)
+ * [name](#name)
+ * [Now](#now)
+ * [ThenDelay](#thendelay)
+ * [ThenYield](#thenyield)
+ * [TimeoutAfter](#timeoutafter)
+ * [toObservable](#toobservable)
+
+## API Documentation
+
+### Functions
+
+#### [defaultObserverFactory](#defaultobserverfactory)
+| **Signature** | `cp.rx.go.Statement.defaultObserverFactory([factoryFn]) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets/sets the factory function which creates a new `Observer` for Statements which are executed without one being provided. |
+| **Parameters** | - factoryFn - if provided, replaces the current default factory function.
|
+| **Returns** | - A new
Observer, or the previous factory function if a new one was provided.
|
+| **Notes** | - The factory function has no arguments provided and must return a new
Observer instance.
|
+
+#### [is](#is)
+| **Signature** | `cp.rx.go.Statement.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Statement`. |
+| **Parameters** | - thing - The thing to test.
|
+| **Returns** | true if the thing is a Statement.
|
+
+#### [toObservable](#toobservable)
+| **Signature** | `cp.rx.go.Statement.toObservable(thing[, params]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts the `thing` into an `Observable`. It converts the following: |
+| **Parameters** | - thing - The thing to convert.
- params - Optional table list to pass as parameters for the
thing if it's a function.
|
+| **Returns** | |
+
+#### [toObservables](#toobservables)
+| **Signature** | `cp.rx.go.Statement.toObservables(things[, params]) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts a list of things into a list of `Observables` of those things. |
+| **Parameters** | - things - a table list of things to convert to
Observables. - params - an optional table list of parameters to pass to any
function things.
|
+| **Returns** | - A table list of the things, converted to
Observable.
|
+
+### Constructors
+
+#### [named](#named)
+| **Signature** | `cp.rx.go.Statement.named(name) -> Statement.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Starts the definition of a new `Statement` with the specified names. |
+| **Parameters** | - name - The name of the
Statement.
|
+| **Returns** | |
+
+### Methods
+
+#### [After](#after)
+| **Signature** | `cp.rx.go.Statement:After(millis[, observer][, scheduler]) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Requests the statement to be executed after the specified amount of time in seconds. |
+| **Parameters** | - millis - The number of milliseconds to delay the execution.
- observer - The observer to subscribe to the final result.
- scheduler - (optional) the
cp.rx.Scheduler to use. Uses the cp.rx.util.defaultScheduler() if none is provided.
|
+| **Returns** | |
+
+#### [Catch](#catch)
+| **Signature** | `cp.rx.go.Statement:Catch(handler) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Assigns a handler which will be applied at the end of the Statement. |
+| **Parameters** | - handler - The handler function
|
+| **Returns** | |
+
+#### [Debug](#debug)
+| **Signature** | `cp.rx.go.Statement:Debug([label]) -> Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that the results of the `Statement` should be output to the Error Log. |
+| **Parameters** | - label - If specified, this is output in the log.
|
+| **Returns** | - The same
Statement instance.
|
+
+#### [Finally](#finally)
+| **Signature** | `cp.rx.go.Statement:Finally(handler) -> Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a function handler to get called when the statement is done, either via an `onError` or `onComplete` signal. |
+| **Parameters** | - handler - The handler function.
|
+| **Returns** | - The same
Statement instance.
|
+
+#### [fullName](#fullname)
+| **Signature** | `cp.rx.go.Statement:fullName()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the Statement's full name. |
+| **Returns** | |
+
+#### [Label](#label)
+| **Signature** | `cp.rx.go.Statement:Label(label) -> Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the custom `label` for the Statement. This will |
+| **Parameters** | - label - Optional new value for the label. If provided, the
Statement is returned.
|
+| **Returns** | - The
Statement if a new lable is specified, otherwise the current label value.
|
+
+#### [name](#name)
+| **Signature** | `cp.rx.go.Statement:name()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the Statement name. |
+| **Returns** | |
+
+#### [Now](#now)
+| **Signature** | `cp.rx.go.Statement:Now([observer]) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Executes the statment immediately. |
+| **Parameters** | - observer - An observer to watch the resulting
Observable. Defaults to the default observer factory.
|
+| **Returns** | |
+
+#### [ThenDelay](#thendelay)
+| **Signature** | `cp.rx.go.Statement:ThenDelay(millis) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that there will be a delay after this statement by the |
+| **Parameters** | - millis - the amount of time to delay, in millisecods.
|
+| **Returns** | |
+
+#### [ThenYield](#thenyield)
+| **Signature** | `cp.rx.go.Statement:ThenYield() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that the `Statement` will "yield" to allow other pending operations to happen, |
+| **Parameters** | |
+| **Returns** | |
+
+#### [TimeoutAfter](#timeoutafter)
+| **Signature** | `cp.rx.go.Statement:TimeoutAfter(millis[, next][, scheduler]) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that this statement should time out after the specified number of milliseconds. |
+| **Parameters** | - millis - A
number or a function returning the number of milliseconds to wait before timing out. - next - Optional string or
resolvable value indicating how to handle it. - scheduler - The
cp.rx.Scheduler to use when timing out. Defaults to cp.rx.defaultScheduler().
|
+| **Returns** | |
+
+#### [toObservable](#toobservable)
+| **Signature** | `cp.rx.go.Statement:toObservable([preserveTimer]) -> cp.rx.Observable` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a new `Observable` instance for the `Statement`. Unless `preserveTimer` is `true`, this will |
+| **Parameters** | - preserveTimer - If a timer has been set via After, don't cancel it. Defaults to
false.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.rx.go.Throw.md b/api/cp/cp.rx.go.Throw.md
new file mode 100644
index 0000000..cfebf55
--- /dev/null
+++ b/api/cp/cp.rx.go.Throw.md
@@ -0,0 +1,27 @@
+# [docs](index.md) » cp.rx.go.Throw
+---
+
+A [Statement](cp.rx.go.Statement.md) that will throw the provided message.
+
+Example:
+
+```lua
+Throw("There was an error: %s", errorMessage)
+```
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Throw](#throw)
+
+## API Documentation
+
+### Constructors
+
+#### [Throw](#throw)
+| **Signature** | `cp.rx.go.Throw([message[, ...]]) -> Throw` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Throw` `Statement` that will throw the message when executed. |
+| **Parameters** | - message - The optional message to return. May contain
string.format tokens - ... - The optional list of parameters to inject into the message.
|
+| **Returns** | - The
Statement which will send the provided error message.
|
+
diff --git a/api/cp/cp.rx.go.WaitUntil.md b/api/cp/cp.rx.go.WaitUntil.md
new file mode 100644
index 0000000..30e00ea
--- /dev/null
+++ b/api/cp/cp.rx.go.WaitUntil.md
@@ -0,0 +1,107 @@
+# [docs](index.md) » cp.rx.go.WaitUntil
+---
+
+A [Statement](cp.rx.go.Statement.md) that will wait for the first value from a `resolveable` that matches the predicate.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [Are](#are)
+ * [AreNot](#arenot)
+ * [Is](#is)
+ * [IsNot](#isnot)
+ * [Matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [WaitUntil](#waituntil)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [Are](#are)
+ * [AreNot](#arenot)
+ * [Is](#is)
+ * [IsNot](#isnot)
+ * [Matches](#matches)
+
+## API Documentation
+
+### Constants
+
+#### [Are](#are)
+| **Signature** | `cp.rx.go.WaitUntil.Are ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets the values to match. |
+
+#### [AreNot](#arenot)
+| **Signature** | `cp.rx.go.WaitUntil.AreNot ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a value to skip over. |
+
+#### [Is](#is)
+| **Signature** | `cp.rx.go.WaitUntil.Is ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a specific value to wait for. |
+
+#### [IsNot](#isnot)
+| **Signature** | `cp.rx.go.WaitUntil.IsNot ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a value that is skipped over. |
+
+#### [Matches](#matches)
+| **Signature** | `cp.rx.go.WaitUntil.Matches ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A `Statement.Modifier` that sets a predicate check values against. |
+
+### Constructors
+
+#### [WaitUntil](#waituntil)
+| **Signature** | `cp.rx.go.WaitUntil(requirement) -> WaitUntil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `WaitUntil` `Statement` with the specified `requirement`. |
+| **Parameters** | - requirement - a
resolvable value that will be checked.
|
+| **Returns** | - The
Statement instance which will check if the resolvable matches the requirement.
|
+
+### Methods
+
+#### [Are](#are)
+| **Signature** | `cp.rx.go.WaitUntil:Are(value) -> WaitUntil.Are` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value to wait for.
|
+| **Returns** | - The
Are Statement.Modifier.
|
+
+#### [AreNot](#arenot)
+| **Signature** | `cp.rx.go.WaitUntil:AreNot(value) -> WaitUntil.AreNot` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to skip over. |
+| **Parameters** | - value - The value to skip over.
|
+| **Returns** | - The
AreNot Statement.Modifier.
|
+
+#### [Is](#is)
+| **Signature** | `cp.rx.go.WaitUntil:Is(value) -> WaitUntil.Is` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to check. |
+| **Parameters** | - value - The value to wait for.
|
+| **Returns** | - The
Is Statement.Modifier.
|
+
+#### [IsNot](#isnot)
+| **Signature** | `cp.rx.go.WaitUntil:IsNot(value) -> WaitUntil.IsNot` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the value to skip. |
+| **Parameters** | - value - The value to skip over.
|
+| **Returns** | - The
IsNot Statement.Modifier.
|
+
+#### [Matches](#matches)
+| **Signature** | `cp.rx.go.WaitUntil:Matches(predicate) -> WaitUntil.Matches` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the predicate function that will check the `requirement` results. |
+| **Parameters** | - predicate - The function that will get called to determine if it has been found.
|
+| **Returns** | - The
Matches Statement.Modifier.
|
+
diff --git a/api/cp/cp.rx.go.md b/api/cp/cp.rx.go.md
new file mode 100644
index 0000000..12b35ed
--- /dev/null
+++ b/api/cp/cp.rx.go.md
@@ -0,0 +1,64 @@
+# [docs](index.md) » cp.rx.go
+---
+
+Defines [Statements](cp.rx.go.Statement.md) to make processing of
+[cp.rx.Observable](cp.rx.Observable.md) values
+in ways that are more familiar to synchronous programmers.
+
+A common activity is to perform some tasks, wait for the results and
+do some more work with those results.
+
+Lets say you want to calculate the price of an item that is in US Dollars (USD) and
+output it in Australian Dollars (AUD). We have `anItem` that will return an
+[Observable](cp.rx.go.Observable.md) that fetches the item price, and an
+`exchangeRate` function that will fetch the current exchange rate for two currencies.
+
+Using reactive operators, you could use the `zip` function to achieve this:
+
+```lua
+Observable.zip(
+ anItem:priceInUSD(),
+ exchangeRate("USD", "AUD")
+)
+:subscribe(function(price, rate)
+ print "AUD Price: ", price * rate
+end)
+```
+
+The final subscription will only be executed once both the `priceInUSD()` and `exchangeRate(...)` push
+a value. It will continue calling it while both keep producing values, but will complete if any of them
+complete.
+
+Using the [Given](cp.rx.go.Given.md) statement it would look like this:
+
+```lua
+Given(
+ anItem:priceInUSD(),
+ exchangeRate("USD", "AUD"),
+)
+:Now(function(price, rate)
+ print "AUD Price: ", price * rate
+end)
+```
+
+For more information on using and creating statements, see the
+[Statements](cp.rx.go.Statements.md) documentation.
+
+## Submodules
+ * [cp.rx.go.Do](cp.rx.go.Do.md)
+ * [cp.rx.go.Done](cp.rx.go.Done.md)
+ * [cp.rx.go.First](cp.rx.go.First.md)
+ * [cp.rx.go.Given](cp.rx.go.Given.md)
+ * [cp.rx.go.If](cp.rx.go.If.md)
+ * [cp.rx.go.Last](cp.rx.go.Last.md)
+ * [cp.rx.go.List](cp.rx.go.List.md)
+ * [cp.rx.go.Require](cp.rx.go.Require.md)
+ * [cp.rx.go.Retry](cp.rx.go.Retry.md)
+ * [cp.rx.go.Statement](cp.rx.go.Statement.md)
+ * [cp.rx.go.Throw](cp.rx.go.Throw.md)
+ * [cp.rx.go.WaitUntil](cp.rx.go.WaitUntil.md)
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.rx.md b/api/cp/cp.rx.md
new file mode 100644
index 0000000..3d2a562
--- /dev/null
+++ b/api/cp/cp.rx.md
@@ -0,0 +1,27 @@
+# [docs](index.md) » cp.rx
+---
+
+Reactive Extensions for Lua.
+
+RxLua gives Lua the power of Observables, which are data structures that represent a stream of values that arrive over time. They're very handy when dealing with events, streams of data, asynchronous requests, and concurrency.
+
+* Originally forked from: https://github.com/bjornbytes/rxlua
+* MIT License: https://github.com/bjornbytes/RxLua/blob/master/LICENSE
+
+## Submodules
+ * [cp.rx.AsyncSubject](cp.rx.AsyncSubject.md)
+ * [cp.rx.BehaviorSubject](cp.rx.BehaviorSubject.md)
+ * [cp.rx.CooperativeScheduler](cp.rx.CooperativeScheduler.md)
+ * [cp.rx.ImmediateScheduler](cp.rx.ImmediateScheduler.md)
+ * [cp.rx.Observable](cp.rx.Observable.md)
+ * [cp.rx.Observer](cp.rx.Observer.md)
+ * [cp.rx.Reference](cp.rx.Reference.md)
+ * [cp.rx.RelaySubject](cp.rx.RelaySubject.md)
+ * [cp.rx.Subject](cp.rx.Subject.md)
+ * [cp.rx.TimeoutScheduler](cp.rx.TimeoutScheduler.md)
+ * [cp.rx.go](cp.rx.go.md)
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.sourcewatcher.md b/api/cp/cp.sourcewatcher.md
index 38429f1..1603744 100644
--- a/api/cp/cp.sourcewatcher.md
+++ b/api/cp/cp.sourcewatcher.md
@@ -19,48 +19,48 @@ Watches folders for specific file extensions and reloads the app if they change.
#### [filesChanged](#fileschanged)
| **Signature** | `cp.sourcewatcher:filesChanged(files, flagTables) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks that the file that triggered the Path Watcher matches the extension given. |
-| **Parameters** | - `files` - Table of files to check as strings
- `flagTables` - Table of flagTables (see: `hs.pathwatcher.new`)
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Checks that the file that triggered the Path Watcher matches the extension given. |
+| **Parameters** | files - Table of files to check as stringsflagTables - Table of flagTables (see: hs.pathwatcher.new)
|
+| **Returns** | |
#### [matchesExtensions](#matchesextensions)
| **Signature** | `cp.sourcewatcher:matchesExtensions(file) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks that the file that triggered the Path Watcher matches the extension given. |
-| **Parameters** | - `file` - The file as string
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Checks that the file that triggered the Path Watcher matches the extension given. |
+| **Parameters** | file - The file as string
|
+| **Returns** | |
#### [new](#new)
| **Signature** | `cp.sourcewatcher.new(extensions) -> sourcewatcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Creates a new `sourcewatcher` instance. |
-| **Parameters** | - `extensions` - Extensions
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Creates a new `sourcewatcher` instance. |
+| **Parameters** | |
+| **Returns** | |
#### [start](#start)
| **Signature** | `cp.sourcewatcher:start() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Starts a Source Watcher. |
+| **Type** | Method |
+| **Description** | Starts a Source Watcher. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [stop](#stop)
| **Signature** | `cp.sourcewatcher:stop() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Stops a Source Watcher. |
+| **Type** | Method |
+| **Description** | Stops a Source Watcher. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [watchPath](#watchpath)
| **Signature** | `cp.sourcewatcher:watchPath(path) -> sourcewatcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Watches a path. |
-| **Parameters** | - `path` - The path you want to watch as a string.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Watches a path. |
+| **Parameters** | path - The path you want to watch as a string.
|
+| **Returns** | |
diff --git a/api/cp/cp.spec.DefaultHandler.md b/api/cp/cp.spec.DefaultHandler.md
new file mode 100644
index 0000000..f40bd63
--- /dev/null
+++ b/api/cp/cp.spec.DefaultHandler.md
@@ -0,0 +1,83 @@
+# [docs](index.md) » cp.spec.DefaultHandler
+---
+
+Default implementation of [Handler](cp.spec.Handler.md), which
+outputs via the standard `print` function.
+
+## API Overview
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [aborted](#aborted)
+ * [failed](#failed)
+ * [filter](#filter)
+ * [printf](#printf)
+ * [printSpacer](#printspacer)
+ * [start](#start)
+ * [stop](#stop)
+ * [summary](#summary)
+ * [waiting](#waiting)
+
+## API Documentation
+
+### Methods
+
+#### [aborted](#aborted)
+| **Signature** | `cp.spec.DefaultHandler:aborted(run, msg)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prints an "[ABORT]" message. |
+| **Parameters** | - run - the run
- msg - the message string.
|
+
+#### [failed](#failed)
+| **Signature** | `cp.spec.DefaultHandler:failed(run, msg)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prints a "[FAIL]" message. |
+| **Parameters** | - run - the run
- msg - the message string.
|
+
+#### [filter](#filter)
+| **Signature** | `cp.spec.DefaultHandler:filter(run, msg)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prints a "[FILTER]" message. |
+| **Parameters** | - run - the run
- msg - the message string.
|
+
+#### [printf](#printf)
+| **Signature** | `cp.spec.DefaultHandler:printf(test, ...)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prints a spacer (if not the first line), followed by the text, |
+| **Parameters** | - text - The message to print.
- ... - The parameters to interpolate into the text message.
|
+
+#### [printSpacer](#printspacer)
+| **Signature** | `cp.spec.DefaultHandler:printSpacer()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prints a blank line if this is not the first time it has been called. |
+
+#### [start](#start)
+| **Signature** | `cp.spec.DefaultHandler:start(run, msg)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | If the handler or run is verbose, prints a "[PASS]" message. |
+| **Parameters** | - run - the run
- msg - the message string.
|
+
+#### [stop](#stop)
+| **Signature** | `cp.spec.DefaultHandler:stop(run)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | If the handler or run is verbose, prints a "[STOP]" message. |
+| **Parameters** | |
+
+#### [summary](#summary)
+| **Signature** | `cp.spec.DefaultHandler:summary(run, report)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | If the handler or run is verbose, prints a "[RESULT]" message. |
+| **Parameters** | |
+
+#### [waiting](#waiting)
+| **Signature** | `cp.spec.DefaultHandler:waiting(run, timeout)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prints a "[WAIT]" message with the timeout value.. |
+
diff --git a/api/cp/cp.spec.Definition.md b/api/cp/cp.spec.Definition.md
new file mode 100644
index 0000000..72ae4ba
--- /dev/null
+++ b/api/cp/cp.spec.Definition.md
@@ -0,0 +1,46 @@
+# [docs](index.md) » cp.spec.Definition
+---
+
+A [Definition](cp.spec.Definition.md) is a superclass for a "runnable" specification.
+It doesn't do anything itself, but provides a common ancestor for all implementation
+classes like [Specification](cp.spec.Specification.md) and [Scenario](cp.spec.Scenario.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Definition](#definition)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [run](#run)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.spec.Definition.is(instance) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Called as a method, this will check if the provided object is an instance of this class. |
+| **Parameters** | - instance - The instance to check.
|
+| **Returns** | true if the instance is an instance of this class.
|
+
+### Constructors
+
+#### [Definition](#definition)
+| **Signature** | `cp.spec.Definition(name[, doing]) -> cp.spec.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new test definition. |
+| **Parameters** | |
+
+### Methods
+
+#### [run](#run)
+| **Signature** | `cp.spec.Definition:run([...]) -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Runs the definition with the specified filter `string`, `function` or `table` of `string`s and `function`s. |
+| **Parameters** | - ... - (optional) The list of filters to apply to any child definitions.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.spec.Error.md b/api/cp/cp.spec.Error.md
new file mode 100644
index 0000000..a955dc3
--- /dev/null
+++ b/api/cp/cp.spec.Error.md
@@ -0,0 +1,19 @@
+# [docs](index.md) » cp.spec.Error
+---
+
+Provides an Error message, which can be thrown via the `error` function.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.spec.Error.is(other) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `other` is an instance of the `Error` class. |
+
diff --git a/api/cp/cp.spec.Handler.md b/api/cp/cp.spec.Handler.md
new file mode 100644
index 0000000..58663ab
--- /dev/null
+++ b/api/cp/cp.spec.Handler.md
@@ -0,0 +1,117 @@
+# [docs](index.md) » cp.spec.Handler
+---
+
+Subclasses of this can customise how reports are handled.
+All methods do nothing.
+
+See [DefaultHandler](cp.spec.DefaultHandler.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [default](#default)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Handler](#handler)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [aborted](#aborted)
+ * [checkVerbose](#checkverbose)
+ * [failed](#failed)
+ * [filter](#filter)
+ * [passed](#passed)
+ * [start](#start)
+ * [stop](#stop)
+ * [summary](#summary)
+ * [verbose](#verbose)
+ * [waiting](#waiting)
+
+## API Documentation
+
+### Functions
+
+#### [default](#default)
+| **Signature** | `cp.spec.Handler.default([handler]) -> cp.spec.Handler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets and sets the current default `Handler` implementation. |
+| **Parameters** | - handler - (optional) when provided, sets the default to the specified handler.
|
+| **Returns** | - The current
Handler implementation.
|
+
+### Constructors
+
+#### [Handler](#handler)
+| **Signature** | `cp.spec.Handler() -> cp.spec.Handler` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Handler` |
+
+### Methods
+
+#### [aborted](#aborted)
+| **Signature** | `cp.spec.Handler:aborted(run)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) has had an abort. |
+| **Parameters** | - run - The test run.
- msg - The message.
|
+
+#### [checkVerbose](#checkverbose)
+| **Signature** | `cp.spec.Handler:checkVerbose(run) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates if either the handler or the individual [Run](cp.spec.Run.md) is |
+
+#### [failed](#failed)
+| **Signature** | `cp.spec.Handler:failed(run)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) has failed. |
+| **Parameters** | - run - The test run.
- msg - The message.
|
+
+#### [filter](#filter)
+| **Signature** | `cp.spec.Handler:filter(run, msg)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) is running due to being filtered. |
+| **Parameters** | - run - The test run.
- msg - The message.
|
+
+#### [passed](#passed)
+| **Signature** | `cp.spec.Handler:passed(run)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) has passed. |
+| **Parameters** | |
+
+#### [start](#start)
+| **Signature** | `cp.spec.Handler:start(run)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) has started. |
+| **Parameters** | |
+
+#### [stop](#stop)
+| **Signature** | `cp.spec.Handler:stop(run)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) has completed. |
+| **Parameters** | |
+
+#### [summary](#summary)
+| **Signature** | `cp.spec.Handler:summary(run, report)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate the [run](cp.spec.Run.md) has passed with the given [report](cp.spec.Report.md). |
+| **Parameters** | - run - The test run.
- report - The test reports.
|
+
+#### [verbose](#verbose)
+| **Signature** | `cp.spec.Handler:verbose([isVerbose]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicate that the handler is (or is not) verbose. |
+| **Parameters** | - isVerbose - (optional) If set to
false, the handler will not be verbose. Defaults to true.
|
+| **Returns** | - The
Handler instance, for chaining.
|
+
+#### [waiting](#waiting)
+| **Signature** | `cp.spec.Handler:waiting(run, timeout)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Call to indicate that the run is waiting asynchronously. |
+| **Parameters** | - run - The test run.
- timeout - The timeout, in seconds.
|
+
diff --git a/api/cp/cp.spec.Message.md b/api/cp/cp.spec.Message.md
new file mode 100644
index 0000000..1b18316
--- /dev/null
+++ b/api/cp/cp.spec.Message.md
@@ -0,0 +1,40 @@
+# [docs](index.md) » cp.spec.Message
+---
+
+Provides an Message message, which can be thrown via the `error` function.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Message](#message)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [traceback](#traceback)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.spec.Message.is(other) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `other` is an instance of the `Message` class. |
+
+### Constructors
+
+#### [Message](#message)
+| **Signature** | `cp.spec.Message(message)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Message message. |
+| **Parameters** | - message - the message to send.
|
+
+### Methods
+
+#### [traceback](#traceback)
+| **Signature** | `cp.spec.Message:traceback()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Stores the `debug.traceback` result at the present time. Can be retrieved via `stacktrace` |
+
diff --git a/api/cp/cp.spec.Report.md b/api/cp/cp.spec.Report.md
new file mode 100644
index 0000000..f5c68e6
--- /dev/null
+++ b/api/cp/cp.spec.Report.md
@@ -0,0 +1,135 @@
+# [docs](index.md) » cp.spec.Report
+---
+
+The results of a test [run](cp.spec.Run.md).
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Report](#report)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [aborts](#aborts)
+ * [failures](#failures)
+ * [passes](#passes)
+ * [run](#run)
+ * [startTime](#starttime)
+ * [stopTime](#stoptime)
+ * [totalTime](#totaltime)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [aborted](#aborted)
+ * [add](#add)
+ * [failed](#failed)
+ * [passed](#passed)
+ * [start](#start)
+ * [stop](#stop)
+ * [summary](#summary)
+ * [waiting](#waiting)
+
+## API Documentation
+
+### Constructors
+
+#### [Report](#report)
+| **Signature** | `cp.spec.Report(run) -> cp.spec.Report` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new test report. |
+
+### Fields
+
+#### [aborts](#aborts)
+| **Signature** | `cp.spec.Report.aborts ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of aborts in the run. |
+
+#### [failures](#failures)
+| **Signature** | `cp.spec.Report.failures ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of failures in the run. |
+
+#### [passes](#passes)
+| **Signature** | `cp.spec.Report.passes ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of passes in the run. |
+
+#### [run](#run)
+| **Signature** | `cp.spec.Report.run ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The [run](cp.spec.Run.md) the reports are for. |
+
+#### [startTime](#starttime)
+| **Signature** | `cp.spec.Report.startTime ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of seconds since epoch when the test started, or `nil` if not started yet. |
+
+#### [stopTime](#stoptime)
+| **Signature** | `cp.spec.Report.stopTime ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of seconds since epoch when the tests stopped, or `nil` if not stopped yet. |
+
+#### [totalTime](#totaltime)
+| **Signature** | `cp.spec.Report.totalTime ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of seconds the run took (may be decimal), or `nil` if the test hasn't run. |
+
+### Methods
+
+#### [aborted](#aborted)
+| **Signature** | `cp.spec.Report:aborted(message)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Records an abort, with the specified message. |
+| **Parameters** | - message - The related message to output.
|
+
+#### [add](#add)
+| **Signature** | `cp.spec.Report:add(otherReport) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds the passes/failures/aborts from the other report into this one. |
+| **Parameters** | - otherReport - The other report to add.
|
+
+#### [failed](#failed)
+| **Signature** | `cp.spec.Report:failed(message)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Records a fail, with the specified message. |
+| **Parameters** | - message - The related message to output.
|
+
+#### [passed](#passed)
+| **Signature** | `cp.spec.Report:passed([message])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Records a pass, with the specified message. |
+| **Parameters** | - message - an optional additional message to output.
|
+
+#### [start](#start)
+| **Signature** | `cp.spec.Report:start() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Logs the start time. |
+
+#### [stop](#stop)
+| **Signature** | `cp.spec.Report:stop() -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Logs the end time. |
+
+#### [summary](#summary)
+| **Signature** | `cp.spec.Report:summary()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Summarise the reports. |
+
+#### [waiting](#waiting)
+| **Signature** | `cp.spec.Report:waiting(timeout)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Records that a run is waiting for up to the specified amount of time. |
+| **Parameters** | - timeout - The timeout to wait for, in seconds.
|
+
diff --git a/api/cp/cp.spec.Run.This.md b/api/cp/cp.spec.Run.This.md
new file mode 100644
index 0000000..0f96308
--- /dev/null
+++ b/api/cp/cp.spec.Run.This.md
@@ -0,0 +1,158 @@
+# [docs](index.md) » cp.spec.Run.This
+---
+
+A token passed to test functions to allow them to indicate if a test [run](cp.spec.Run.md)
+will complete asynchronously.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [state](#state)
+* Functions - API calls offered directly by the extension
+ * [defaultTimeout](#defaulttimeout)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [This](#this)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [abort](#abort)
+ * [cleanup](#cleanup)
+ * [done](#done)
+ * [expectAbort](#expectabort)
+ * [expectFail](#expectfail)
+ * [fail](#fail)
+ * [isActive](#isactive)
+ * [isDone](#isdone)
+ * [isWaiting](#iswaiting)
+ * [log](#log)
+ * [prepare](#prepare)
+ * [run](#run)
+ * [toObserver](#toobserver)
+ * [wait](#wait)
+
+## API Documentation
+
+### Constants
+
+#### [state](#state)
+| **Signature** | `cp.spec.Run.This.state` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | A collection of states that a `Run.This` can be in. |
+| **Notes** | - States include:
- running - The Run is currently running and will terminate at the end of the function (synchrnonous).
- waiting - The Run is waiting, and will terminate when done() is called. (asynchronous).
- done - The Run is done.
|
+
+### Functions
+
+#### [defaultTimeout](#defaulttimeout)
+| **Signature** | `cp.spec.Run.This.defaultTimeout([timeout]) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets and/or sets the default timeout for asynchronous tests. |
+| **Parameters** | - timeout - (optional) the new timeout, in seconds.
|
+| **Returns** | - The current default timeout, in seconds.
|
+
+### Constructors
+
+#### [This](#this)
+| **Signature** | `cp.spec.Run.This(run, actionFn, index) -> cp.spec.Run.This` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Run.This` instance for a [Run](cp.spec.Run.md). |
+| **Parameters** | - run - The Run.
- actionFn - The action function to execute.
- index - The index of the action in the current phase.
|
+| **Returns** | |
+
+### Methods
+
+#### [abort](#abort)
+| **Signature** | `cp.spec.Run.This:abort([message])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates the stage has aborted. |
+| **Parameters** | - message - The optional message to output.
|
+
+#### [cleanup](#cleanup)
+| **Signature** | `cp.spec.Run.This:cleanup()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Cleans up This after a step. |
+
+#### [done](#done)
+| **Signature** | `cp.spec.Run.This:done()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that the test is completed. |
+
+#### [expectAbort](#expectabort)
+| **Signature** | `cp.spec.Run.This:expectAbort([messagePattern]) -> Run.This` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that this spec is expecting an abort/`error` to occur. |
+| **Parameters** | - messagePattern - The pattern to check the fail message against. If not provided, any message will match.
|
+| **Returns** | - The same
Run.This instance.
|
+
+#### [expectFail](#expectfail)
+| **Signature** | `cp.spec.Run.This:expectFail([messagePattern]) -> Run.This` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that this spec is expecting an assert/fail to occur. |
+| **Parameters** | - messagePattern - The pattern to check the fail message against. If not provided, any message will match.
|
+| **Returns** | - The same
Run.This instance.
|
+
+#### [fail](#fail)
+| **Signature** | `cp.spec.Run.This:fail([message])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates the run has failed. |
+| **Parameters** | - message - The optional message to output.
|
+
+#### [isActive](#isactive)
+| **Signature** | `cp.spec.Run.This:isActive() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the this is in an active state - either `running` or `waiting`. |
+| **Returns** | |
+
+#### [isDone](#isdone)
+| **Signature** | `cp.spec.Run.This:isDone() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns `true` if this is done. |
+
+#### [isWaiting](#iswaiting)
+| **Signature** | `cp.spec.Run.This:isWaiting() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the [Run](cp.spec.Run.md) is waiting for this execution to complete via the |
+| **Returns** | |
+
+#### [log](#log)
+| **Signature** | `cp.spec.Run.This:log(message[, ...])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | When the current [Run](cp.spec.Run.md) is in [debug](#debug) mode, output the message to the console. |
+| **Parameters** | - message - the text message to output.
- ... - optional parameters, to be injected into the message, ala
string.format.
|
+
+#### [prepare](#prepare)
+| **Signature** | `cp.spec.Run.This:prepare()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prepares this to run. |
+
+#### [run](#run)
+| **Signature** | `cp.spec.Run.This:run() -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the current [Run](cp.spec.Run.md) |
+
+#### [toObserver](#toobserver)
+| **Signature** | `cp.spec.Run.This:toObserver([onNext[, onError[, onCompleted]]) -> cp.rx.Observer` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates an [Observer](cp.rx.Observer.md). If the `onNext`/`onError`/`onCompleted` functions are |
+| **Parameters** | - onNext - The
next handler. - onError - The
error handler. - onCompleted - The
completed handler.
|
+
+#### [wait](#wait)
+| **Signature** | `cp.spec.Run.This:wait([timeout])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that the test is continuing asynchronously, and will |
+| **Parameters** | - timeout - (optional) The number of seconds to wait before timing out.
|
+| **Notes** | |
+
diff --git a/api/cp/cp.spec.Run.md b/api/cp/cp.spec.Run.md
new file mode 100644
index 0000000..fb411c9
--- /dev/null
+++ b/api/cp/cp.spec.Run.md
@@ -0,0 +1,167 @@
+# [docs](index.md) » cp.spec.Run
+---
+
+An individual run of a test [Definition](cp.spec.Definition.md) or [Specification](cp.spec.Specification.md).
+
+## Submodules
+ * [cp.spec.Run.This](cp.spec.Run.This.md)
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Run](#run)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [phase](#phase)
+ * [report](#report)
+ * [result](#result)
+ * [shared](#shared)
+ * [source](#source)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [debug](#debug)
+ * [expectAbort](#expectabort)
+ * [expectFail](#expectfail)
+ * [isDebugging](#isdebugging)
+ * [isExpectingAbort](#isexpectingabort)
+ * [isExpectingFail](#isexpectingfail)
+ * [log](#log)
+ * [onBefore](#onbefore)
+ * [onBfter](#onbfter)
+ * [onRunning](#onrunning)
+ * [parent](#parent)
+ * [verbose](#verbose)
+
+## API Documentation
+
+### Constructors
+
+#### [Run](#run)
+| **Signature** | `cp.spec.Run(name) -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new test run. |
+| **Parameters** | - name - The name of the run.
- source - The object (typically a Definition) that initiated the run.
|
+
+### Fields
+
+#### [phase](#phase)
+| **Signature** | `cp.spec.Run.phase ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current [phase](#phase) of the run. |
+
+#### [report](#report)
+| **Signature** | `cp.spec.Run.report ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The reports of the run. |
+
+#### [result](#result)
+| **Signature** | `cp.spec.Run.result ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current result. Defaults to `Run.result.passing`. |
+
+#### [shared](#shared)
+| **Signature** | `cp.spec.Run.shared ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The set of data shared by all phases of the Run. Data from parent Runs will also be available. |
+
+#### [source](#source)
+| **Signature** | `cp.spec.Run.source` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The object that initiated the run. Typically a [Definition](cp.spec.Definition.md). |
+
+### Methods
+
+#### [debug](#debug)
+| **Signature** | `cp.spec.Run:debug() -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Enables debugging on this `Run`. Any calls to [#log] will be output to the console. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [expectAbort](#expectabort)
+| **Signature** | `cp.spec.Run:expectAbort([messagePattern]) -> Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that this spec is expecting an abort/`error` to occur. |
+| **Parameters** | - messagePattern - The pattern to check the fail message against. If not provided, any message will match.
|
+| **Returns** | |
+
+#### [expectFail](#expectfail)
+| **Signature** | `cp.spec.Run:expectFail([messagePattern]) -> Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Indicates that this spec is expecting an assert/fail to occur. |
+| **Parameters** | - messagePattern - The pattern to check the fail message against. If not provided, any message will match.
|
+| **Returns** | |
+
+#### [isDebugging](#isdebugging)
+| **Signature** | `cp.spec.Run:isDebugging() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if `debug` has been enabled on this or any parent `Run`. |
+
+#### [isExpectingAbort](#isexpectingabort)
+| **Signature** | `cp.spec.Run:isExpectingAbort() -> boolean, string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the run is expecting a abort/error to occur. |
+| **Parameters** | |
+| **Returns** | - boolean -
true, if a fail is expected. - string - the message pattern, if specified.
|
+
+#### [isExpectingFail](#isexpectingfail)
+| **Signature** | `cp.spec.Run:isExpectingFail() -> boolean, string or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the run is expecting a fail to occur. |
+| **Parameters** | |
+| **Returns** | - boolean -
true, if a fail is expected. - string - the message pattern, if specified.
|
+
+#### [log](#log)
+| **Signature** | `cp.spec.Run:log(message[, ...])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | When the current [Run](cp.spec.Run.md) is in [debug](#debug) mode, output the message to the console. |
+| **Parameters** | - message - the text message to output.
- ... - optional parameters, to be injected into the message, ala
string.format.
|
+
+#### [onBefore](#onbefore)
+| **Signature** | `cp.spec.Run:onBefore(actionFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds a callback function to run prior to executing the actual test. |
+| **Parameters** | - actionFn - The function to run, passed this
Run.This as the first parameter.
|
+
+#### [onBfter](#onbfter)
+| **Signature** | `cp.spec.Run:onBfter(actionFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds a callback function to run after to executing the actual test, pass or fail. |
+| **Parameters** | - actionFn - The function to run, passed this
Run as the first parameter.
|
+
+#### [onRunning](#onrunning)
+| **Signature** | `cp.spec.Run:onRunning(actionFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds a callback function to run during the test. |
+| **Parameters** | - runningFn - The function to run, passed Run.This as the first parameter.
|
+
+#### [parent](#parent)
+| **Signature** | `cp.spec.Run:parent([parent]) -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets and/or sets the parent `Run` for this run. |
+| **Parameters** | - parent - (optional) If set, will set the parent
Run.
|
+| **Returns** | |
+| **Notes** | - If a
parent is provided and there is already another Run set as a parent, an error is thrown.
|
+
+#### [verbose](#verbose)
+| **Signature** | `cp.spec.Run:verbose([isVerbose]) -> boolean | self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Either sets the `verbose` value and returns itself for further chaining, or returns |
+| **Parameters** | - isVerbose - (optional) if
true or false will update the verbose status and return this Run.
|
+| **Returns** | - The current
verbose status, or this Run if isVerbose is provided.
|
+
diff --git a/api/cp/cp.spec.Scenario.md b/api/cp/cp.spec.Scenario.md
new file mode 100644
index 0000000..5b03722
--- /dev/null
+++ b/api/cp/cp.spec.Scenario.md
@@ -0,0 +1,116 @@
+# [docs](index.md) » cp.spec.Scenario
+---
+
+A [Definition](cp.spec.Definition.md) which describes a specific scenario.
+
+A `Scenario` is most typically created via the [it](cp.spec.md#it) function, like so:
+
+```lua
+local spec = require "cp.spec"
+local describe, it = spec.describe, spec.it
+
+local Rainbow = require "my.rainbow"
+
+return describe "a rainbow" {
+ it "has seven colors"
+ :doing(function()
+ local rainbow = Rainbow()
+ assert(#rainbow:colors() == 7, "the rainbow has seven colors")
+ end)
+}
+```
+
+Scenarios can be run asynchronously via the [Run.This](cp.spec.Run.This.md) instance passed to the `doing` function.
+To indicate a scenario is asynchronous, call [`this:wait()`](cp.spec.Run.This.md#wait), then call
+[`this:done()`](cp.spec.Run.This.md#done), to indicate it has completed. Any `assert` call which fails will
+result in the run failing, and stop at that point.
+
+For example:
+
+```lua
+return describe "a rainbow" {
+ it "has a pot of gold at the end"
+ :doing(function(this)
+ this:wait()
+ local rainbow = Rainbow()
+ rainbow:goToEnd(function(whatIsThere)
+ assert(whatIsThere:isInstanceOf(PotOfGold))
+ this:done()
+ end)
+ end)
+}
+```
+
+Definitions can also be data-driven, via the [where](#where) method:
+
+```lua
+return describe "a rainbow" {
+ it "has ${color} at index ${index}"
+ :doing(function(this)
+ local rainbow = Rainbow()
+ assert(rainbow[this.index] == this.color)
+ end)
+ :where {
+ { "index", "color" },
+ { 1, "red" },
+ { 2, "orange" },
+ { 3, "yellow" },
+ { 4, "blue" },
+ { 5, "green" },
+ { 6, "indigo" },
+ { 7, "violet" },
+ },
+}
+```
+
+This will do a run for each variation and interpolate the value into the run name for each.
+
+**Note:** "where" parameters will not override built-in functions and fields in the [this](cp.spec.Run.This.md)
+instance (such as "async" or "done") so ensure that you pick names that don't clash.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Scenario](#scenario)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doing](#doing)
+ * [run](#run)
+ * [where](#where)
+
+## API Documentation
+
+### Constructors
+
+#### [Scenario](#scenario)
+| **Signature** | `cp.spec.Scenario(name[, testFn]) -> cp.spec.Scenario` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Scenario` with the specified name. |
+| **Parameters** | - name - The name of the scenario.
- testFn - (optional) The
function which performs the test for in the scenario.
|
+| **Returns** | |
+| **Notes** | - If the
testFn is not provided here, it must be done via the doing method prior to running, an error will occur.
|
+
+### Methods
+
+#### [doing](#doing)
+| **Signature** | `cp.spec.Scenario:doing(actionFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies the `function` for the definition. |
+| **Parameters** | - testFn - The function that will do the test.
|
+| **Returns** | |
+
+#### [run](#run)
+| **Signature** | `cp.spec.Scenario:run(...) -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Runs the scenario. |
+| **Parameters** | - ... - The list of filters. The first one will be compared to this scenario to determine it should be run.
|
+
+#### [where](#where)
+| **Signature** | `cp.spec.Scenario:where(data) -> cp.spec.Where` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies a `table` of data that will be iterated through as multiple [Runs](cp.spec.Run.md), one row at a time. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.spec.Specification.md b/api/cp/cp.spec.Specification.md
new file mode 100644
index 0000000..f249eae
--- /dev/null
+++ b/api/cp/cp.spec.Specification.md
@@ -0,0 +1,83 @@
+# [docs](index.md) » cp.spec.Specification
+---
+
+A Specification is a list of [definitions](cp.spec.Definition.md) which
+will be run in sequence, and the results are collated. It is often created via
+the [describe](cp.spec.md#describe) function.
+
+Example usage:
+```
+local spec = require "cp.spec"
+local describe, it = spec.describe, spec.it
+
+return describe "a specification" {
+ it "performs an assertion"
+ :doing(function()
+ assert(true, "should not fail")
+ end),
+}
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Specification](#specification)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [onAfterEach](#onaftereach)
+ * [onBeforeEach](#onbeforeeach)
+ * [run](#run)
+ * [with](#with)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.spec.Specification.is(instance) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `instance` is an instance of `Specification`. |
+| **Returns** | true if it's a Specification instance.
|
+
+### Constructors
+
+#### [Specification](#specification)
+| **Signature** | `cp.spec.Specification(name) -> cp.spec.Specification` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new test suite. |
+
+### Methods
+
+#### [onAfterEach](#onaftereach)
+| **Signature** | `cp.spec.Specification:onAfterEach(afterEachFn) -> cp.spec.Specification` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies a function to execute after each of the contained specifications is run. |
+| **Parameters** | - afterEachFn - The function to run after each child runs.
|
+| **Returns** | - The same
cp.spec.Specification instance.
|
+
+#### [onBeforeEach](#onbeforeeach)
+| **Signature** | `cp.spec.Specification:onBeforeEach(beforeEachFn) -> cp.spec.Specification` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Specifies a function to execute before each of the contained specifications is run. |
+| **Parameters** | - beforeEachFn - The function to run before each child runs.
|
+| **Returns** | - The same
cp.spec.Specification instance.
|
+
+#### [run](#run)
+| **Signature** | `cp.spec.Specification:run() -> cp.spec.Run` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Runs the specification, returning the [Run](cp.spec.Run.md) instance, already running. |
+| **Returns** | |
+
+#### [with](#with)
+| **Signature** | `cp.spec.Specification:with(...) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds the provided [definitions](cp.spec.Definition.md) to the suite. |
+| **Parameters** | |
+| **Returns** | - The same
Specification instance, with the definitions added.
|
+
diff --git a/api/cp/cp.spec.TestCase.md b/api/cp/cp.spec.TestCase.md
new file mode 100644
index 0000000..3298786
--- /dev/null
+++ b/api/cp/cp.spec.TestCase.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.spec.TestCase
+---
+
+Wraps [cp.test](cp.test.md) into a subclass of [Scenario](cp.spec.Scenario.md).
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.spec.Where.md b/api/cp/cp.spec.Where.md
new file mode 100644
index 0000000..d48fb9f
--- /dev/null
+++ b/api/cp/cp.spec.Where.md
@@ -0,0 +1,11 @@
+# [docs](index.md) » cp.spec.Where
+---
+
+Created via [Scenario:where(...)](cp.spec.Scenario.md#where).
+
+Extends [Definition](cp.spec.Definition.md)
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.spec.expect.md b/api/cp/cp.spec.expect.md
new file mode 100644
index 0000000..455b67a
--- /dev/null
+++ b/api/cp/cp.spec.expect.md
@@ -0,0 +1,18 @@
+# [docs](index.md) » cp.spec.expect
+---
+
+Provides a way of checking values match expected results. At it's core, it uses `assert` to make the check.
+
+For example:
+
+```lua
+expect("Hello World"):is("Hello World")
+expect("Hello World"):isNot("Hello Mars")
+expect(value):isAtLeast(10)
+expect.given("the world is a globe"):that(theEarth):isNot("flat")
+```
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.spec.md b/api/cp/cp.spec.md
new file mode 100644
index 0000000..9233a79
--- /dev/null
+++ b/api/cp/cp.spec.md
@@ -0,0 +1,239 @@
+# [docs](index.md) » cp.spec
+---
+
+An synchronous/asynchronous test library for Lua.
+
+This library uses a syntax similar to Ruby RSpec or Mocha.js.
+
+## Simple Synchronous Test
+
+To create a test, create a new file ending with `_spec.lua`. For example, `simple_spec.lua`:
+
+```lua
+local spec = require "cp.spec"
+local it = spec.it
+
+return it "always passes"
+:doing(function()
+ assert(true, "This always passes")
+end)
+```
+
+It can be run from the Debug Console like so:
+
+```
+cp.spec "simple" ()
+```
+
+It will report something like this:
+
+```
+2019-10-06 18:13:28: [RESULT] it always passes: passed: 1; failed: 0; aborted: 0; time: 0.0022s
+```
+
+## Simple Synchronous Failure
+
+If a test fails, it gives a report of where it failed, and if provided, the related message:
+
+```lua
+local spec = require "cp.spec"
+local it = spec.it
+
+return it "always fails"
+:doing(function()
+ assert(false, "This always fails")
+end)
+```
+
+This will result in something like this:
+
+```
+2019-10-06 21:54:16: [FAIL] it always fails: [.../simple_spec.lua:6] This always fails
+2019-10-06 21:54:16:
+2019-10-06 21:54:16: [RESULT] it always fails: passed: 0; failed: 1; aborted: 0; time: 0.0370s
+```
+
+You can then check the line that failed and resolve the issue.
+
+## Simple Asynchronous Test
+
+Performing an asynchronous test is only a little more complicated.
+We'll modify our `simple_spec.lua` to use of the [Run.This](cp.spec.Run.This.md) instance available to every test:
+
+```lua
+local spec = require "cp.spec"
+local it = spec.it
+local timer = require "hs.timer"
+
+return it "always passes"
+:doing(function(this)
+ this:wait(5)
+ assert(true, "This happens immediately")
+ timer.doAfter(2, function()
+ assert(true, "This happens after 2 seconds.")
+ this:done()
+ end)
+end)
+```
+
+Other than using `hs.timer` to actually make this asynchronous, the key additions here are:
+ * `this:wait(5)`: Tells the test that it is asynchronous, and to wait 5 seconds before timing out.
+ * `this:done()`: Called inside the asynchronous function to indicate that it's complete.
+
+Asycnchronous (and synchronous) tests can also be terminated by a failed `assert`, an `error` or a call to [this:fail(...)](cp.spec.Run.This.md#fail)
+or [this:abort(...)](cp.spec.Run.This.md#abort)
+
+## Multiple tests
+
+Most things you're testing will require more than a single test. For this,
+We use [Specification](cp.spec.Specification.md), most simply via the [describe](#describe) function:
+
+```lua
+local spec = require "cp.spec"
+local describe, it = spec.describe, spec.it
+
+local function sum(a,b)
+ return a + b
+end
+
+return describe "sum" {
+ it "results in 3 when you add 1 and 2"
+ :doing(function()
+ assert(sum(1, 2) == 3)
+ end),
+ it "results in 0 when you add 1 and -1"
+ :doing(function()
+ assert(sum(1, -1) == 0)
+ end),
+}
+```
+
+This will now run two tests, and report something like this:
+
+```
+2019-10-06 21:40:00: [RESULT] sum: passed: 2; failed: 0; aborted: 0; time: 0.0027s
+```
+
+## Data-driven Testing
+
+When testing a feature, there are often multiple variations you want to test,
+and repeating individual tests can get tedious.
+
+This is a great place to use the [where](cp.spec.Scenario.md#where) feature.
+Our previous test can become something like this:
+
+```lua
+return describe "sum" {
+ it "results in ${result} when you add ${a} and ${b}"
+ :doing(function(this)
+ assert(sum(this.a, this.b) == this.result)
+ end)
+ :where {
+ { "a", "b", "result"},
+ { 1, 2, 3 },
+ { 1, -1, 0 },
+ },
+}
+```
+
+Other variations can be added easily by adding more rows.
+
+## Running Multiple Specs
+
+As shown above, you can run a single spec like so:
+
+```lua
+cp.spec "path.to.spec" ()
+```
+
+You can also run that spec an all other specs under the same path by adding `".*"` to the end.
+
+```lua
+cp.spec "path.to.spec.*" ()
+```
+
+Or run every spec in your system like so:
+
+```lua
+cp.spec "*" ()
+```
+
+## Submodules
+ * [cp.spec.DefaultHandler](cp.spec.DefaultHandler.md)
+ * [cp.spec.Definition](cp.spec.Definition.md)
+ * [cp.spec.Error](cp.spec.Error.md)
+ * [cp.spec.Handler](cp.spec.Handler.md)
+ * [cp.spec.Message](cp.spec.Message.md)
+ * [cp.spec.Report](cp.spec.Report.md)
+ * [cp.spec.Run](cp.spec.Run.md)
+ * [cp.spec.Scenario](cp.spec.Scenario.md)
+ * [cp.spec.Specification](cp.spec.Specification.md)
+ * [cp.spec.TestCase](cp.spec.TestCase.md)
+ * [cp.spec.Where](cp.spec.Where.md)
+ * [cp.spec.expect](cp.spec.expect.md)
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [describe](#describe)
+ * [find](#find)
+ * [is](#is)
+ * [it](#it)
+ * [setSearchPath](#setsearchpath)
+ * [spec](#spec)
+ * [test](#test)
+
+## API Documentation
+
+### Functions
+
+#### [describe](#describe)
+| **Signature** | `cp.spec.describe(name) -> function(definitions) -> cp.spec.Specification` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a `function` which will accept a list of test [definitions](cp.spec.Definition.md), |
+| **Parameters** | - name - The name of the test suite.
|
+| **Returns** | |
+
+#### [find](#find)
+| **Signature** | `cp.spec.find(idPattern) -> cp.spec.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Attempts to find specs that match the provided ID pattern. |
+
+#### [is](#is)
+| **Signature** | `cp.spec.Handled.is(other) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `other` is an instance of the `Handled` class. |
+
+#### [it](#it)
+| **Signature** | `cp.spec.it(name[, ...]) -> cp.spec.Scenario` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns an [Scenario](cp.spec.Scenario.md) with the specified name and optional `doingFn` function. |
+| **Parameters** | - name - The name of the scenario.
- doingFn - (optional) The
function to call when doing the operation. Will be passed the Run.This instance for the definition.
|
+| **Notes** | - See doing for more details regarding the function.
|
+
+#### [setSearchPath](#setsearchpath)
+| **Signature** | `cp.spec.setSearchPath(path)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Sets the path that will be used to search for `spec` files with the `spec "my.extension"` call. |
+| **Parameters** | - path - The path to search for
spec files. Set to nil to only search the default package path.
|
+
+#### [spec](#spec)
+| **Signature** | `cp.spec(id) -> cp.spec.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | This will search the package path (and [specPath](#setSpecPath), if set) for `_spec.lua` files. |
+| **Parameters** | - id - the path ID for the spec. Eg. "cp.app"
|
+| **Returns** | |
+
+#### [test](#test)
+| **Signature** | `cp.spec.test(id) -> cp.spec.Definition` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Attempts to load a [cp.test](cp.test.md) with the specified ID, converting |
+| **Parameters** | - id - The
cp.test ID (eg. "cp.app").
|
+| **Returns** | - The
Definition or throws an error if it can't be found.
|
+
diff --git a/api/cp/cp.strings.md b/api/cp/cp.strings.md
index 718b7ab..13aa68f 100644
--- a/api/cp/cp.strings.md
+++ b/api/cp/cp.strings.md
@@ -18,9 +18,10 @@ Note: This will load the file on each request. To have values cached, use the `c
* Constructors - API calls which return an object, typically one that offers API methods
* [new](#new)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [context](#context)
* [find](#find)
* [findInSources](#findinsources)
- * [findKeysIn](#findkeysin)
+ * [findKeys](#findkeys)
* [findKeysInSources](#findkeysinsources)
* [from](#from)
* [fromPlist](#fromplist)
@@ -30,60 +31,68 @@ Note: This will load the file on each request. To have values cached, use the `c
### Constructors
#### [new](#new)
-| **Signature** | `cp.strings.new() -> cp.strings` |
+| **Signature** | `cp.strings.new(context) -> cp.strings` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new `strings` instance. You should add sources with the [from](#from) or [fromPlist](#fromPlist) methods. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Constructor |
+| **Description** | Creates a new `strings` instance. You should add sources with the [from](#from) or [fromPlist](#fromPlist) methods. |
+| **Parameters** | - context - The initial context.
|
+| **Returns** | |
### Methods
+#### [context](#context)
+| **Signature** | `cp.strings:context([context]) -> table | self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets or sets a context to be set for the strings. This typically includes a `language`, which |
+| **Parameters** | - context - A table with values which may be used by the source.
|
+| **Returns** | - If a new context is provided, the
cp.string.source is returned, otherwise the current context table is returned.
|
+
#### [find](#find)
-| **Signature** | `cp.strings:find(language, key) -> string | nil` |
+| **Signature** | `cp.strings:find(key[, context[, quiet]) -> string | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Searches for the specified key in the specified language, caching the result when found. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `key` - The key to retrieve from the file.
|
-| **Returns** | - The value of the key, or `nil` if not found.
|
+| **Type** | Method |
+| **Description** | Searches for the specified key, caching the result when found. |
+| **Parameters** | key - The key to retrieve from the file.context - Optional table with additional/alternate context.quiet - Optional boolean, defaults to false. If true, no warnings are logged for missing keys.
|
+| **Returns** | - The value of the key, or
nil if not found.
|
#### [findInSources](#findinsources)
-| **Signature** | `cp.strings:findInSources(language, key) -> string | nil` |
+| **Signature** | `cp.strings:findInSources(key[, context[, quiet]]) -> string | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Searches directly in the sources for the specified language/key combination. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `key` - The key to retrieve from the file.
|
-| **Returns** | - The value of the key, or `nil` if not found.
|
+| **Type** | Method |
+| **Description** | Searches directly in the sources for the specified key. |
+| **Parameters** | key - The key to retrieve from the file.context - Optional table with additional/alternate context.quiet - Optional boolean, defaults to false. If true, no warnings are logged for missing keys.
|
+| **Returns** | - The value of the key, or
nil if not found.
|
-#### [findKeysIn](#findkeysin)
-| **Signature** | `cp.strings:findKeysIn(language, value) -> string | nil` |
+#### [findKeys](#findkeys)
+| **Signature** | `cp.strings:findKeys(value[, context]) -> string | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Searches for the list of keys with a matching value, in the specified language. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `value` - The value to search for.
|
-| **Returns** | - The array of keys, or `{}` if not found.
|
+| **Type** | Method |
+| **Description** | Searches for the list of keys with a matching value, in the specified language. |
+| **Parameters** | value - The value to search for.context - The language code to look for (e.g. "en", or "fr").
|
+| **Returns** | - The array of keys, or
{} if not found.
|
#### [findKeysInSources](#findkeysinsources)
-| **Signature** | `cp.strings:findKeysInSources(language, value) -> string | nil` |
+| **Signature** | `cp.strings:findKeysInSources(value[, context]) -> string | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Searches directly in the sources for the specified language/value combination. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `value` - The value to search for.
|
-| **Returns** | - The array of keys, or `{}` if not found.
|
+| **Type** | Method |
+| **Description** | Searches directly in the sources for the specified key value pattern. |
+| **Parameters** | value - The value to search for.context - Optional additional context for the request.
|
+| **Returns** | - The array of keys, or
{} if not found.
|
#### [from](#from)
| **Signature** | `cp.strings:from(source) -> cp.strings` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds the source to the strings sources. |
-| **Parameters** | - `source` - The source to add.
|
-| **Returns** | - The current `cp.strings` instance.
|
+| **Type** | Method |
+| **Description** | Adds the source to the strings sources. |
+| **Parameters** | source - The source to add.
|
+| **Returns** | - The current
cp.strings instance.
|
#### [fromPlist](#fromplist)
| **Signature** | `cp.strings:fromPlist(pathPattern) -> cp.strings` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Convenience method for addedn a `plist` source to the strings instance. |
-| **Parameters** | - `pathPattern` - The path to load from. May contain a special `${language}` marker which will be replace with the provided langauge when searching.
|
-| **Returns** | - The current `cp.strings` instance.
|
+| **Type** | Method |
+| **Description** | Convenience method for adding a `plist` source to the strings instance. |
+| **Parameters** | pathPattern - The path to load from. May contain a special ${language} marker which will be replace with the provided langauge when searching.
|
+| **Returns** | - The current
cp.strings instance.
|
diff --git a/api/cp/cp.strings.source.plist.md b/api/cp/cp.strings.source.plist.md
index 398e6e1..ad1ba5c 100644
--- a/api/cp/cp.strings.source.plist.md
+++ b/api/cp/cp.strings.source.plist.md
@@ -17,6 +17,7 @@ Note: This will load the file on each request. To have values cached, use the `c
* Constructors - API calls which return an object, typically one that offers API methods
* [new](#new)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [context](#context)
* [find](#find)
* [findKeys](#findkeys)
* [loadFile](#loadfile)
@@ -30,58 +31,66 @@ Note: This will load the file on each request. To have values cached, use the `c
#### [defaultCacheSeconds](#defaultcacheseconds)
| **Signature** | `cp.strings.source.plist.defaultCacheSeconds` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The default number of seconds to cache results. |
+| **Type** | Constant |
+| **Description** | The default number of seconds to cache results. |
### Constructors
#### [new](#new)
-| **Signature** | `cp.strings.source.plist.new(language) -> source` |
+| **Signature** | `cp.strings.source.plist.new(pathPattern[, cacheSeconds]) -> source` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new `cp.strings` source that loads strings from a plist file. |
-| **Parameters** | - `pathPattern` - The path to load from. May contain a special `${language}` marker which will be replace with the provided langauge when searching.
- `cacheSeconds` - (optional) How long in seconds to keep the loaded values cached in memory. Defaults to [defaultCacheSeconds](#defaultCacheSeconds)
|
-| **Returns** | - The new plist `source` instance.
|
+| **Type** | Constructor |
+| **Description** | Creates a new `cp.strings` source that loads strings from a plist file. |
+| **Parameters** | pathPattern - The path to load from. May contain a special ${language} marker which will be replace with the provided langauge when searching.cacheSeconds - (optional) How long in seconds to keep the loaded values cached in memory. Defaults to defaultCacheSeconds
|
+| **Returns** | - The new plist
source instance.
|
### Methods
+#### [context](#context)
+| **Signature** | `cp.strings.source.plist:context([context]) -> table | self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets or sets a context to be set for the source. This typically includes a `language`, which |
+| **Parameters** | - context - A table with values which may be used by the source.
|
+| **Returns** | - If a new context is provided, the
cp.string.source is returned, otherwise the current context table is returned.
|
+
#### [find](#find)
-| **Signature** | `cp.strings.source.plist:find(language, key) -> string` |
+| **Signature** | `cp.strings.source.plist:find(key[, context]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the specified `key` value in the plist file for the specified `language`, if the plist can be found, and contains matching key value. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `key` - The key to retrieve from the file.
|
-| **Returns** | - The value of the key, or `nil` if not found.
|
+| **Type** | Method |
+| **Description** | Finds the specified `key` value in the plist, if the plist can be found, and contains matching key value. |
+| **Parameters** | key - The key to retrieve from the file.context - Optional table with additional/alternate context. It will be added to the current context temporarily.
|
+| **Returns** | - The value of the key, or
nil if not found.
|
#### [findKeys](#findkeys)
-| **Signature** | `cp.strings.source.plist:findKeys(language, value) -> {string}` |
+| **Signature** | `cp.strings.source.plist:findKeys(pattern) -> {string}` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the array of keys with the matching value in the plist file for the specified `language`, if the plist can be found, and contains matching key. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `value` - The value.
|
-| **Returns** | - The array of keys, or `{}` if none were fround
|
+| **Type** | Method |
+| **Description** | Finds the array of keys who's value matches the pattern in this table. It will check that the pattern matches the beginning of the value. |
+| **Parameters** | - `pattern - The string pattern to match.
context - An optional additional context for the source.
|
+| **Returns** | - The array of keys, or
{} if none were fround
|
#### [loadFile](#loadfile)
-| **Signature** | `cp.strings.source.plist:loadFile(language) -> string` |
+| **Signature** | `cp.strings.source.plist:loadFile([context]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Loads the plist file for the specified language, returning the value as a table. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
|
-| **Returns** | - The table for the specified language, or `nil` if the file doesn't exist.
|
+| **Type** | Method |
+| **Description** | Loads the plist file for the specified context, returning the value as a table. |
+| **Parameters** | context - The context to determine the absolute path with. This will be added to any values provided in the default context.
|
+| **Returns** | - The table for the specified language, or
nil if the file doesn't exist.
|
#### [pathToAbsolute](#pathtoabsolute)
-| **Signature** | `cp.strings.source.plist:pathToAbsolute(language) -> string` |
+| **Signature** | `cp.strings.source.plist:pathToAbsolute([context]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the abolute path to the `plist` represented by this source for the specified langauge, or `nil` if it does not exist. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
|
-| **Returns** | - The path to the file, or `nil` if not found.
|
+| **Type** | Method |
+| **Description** | Finds the abolute path to the `plist` represented by this source for the specified langauge, or `nil` if it does not exist. |
+| **Parameters** | context - The context to determine the absolute path with. This will be added to any values provided in the default context.
|
+| **Returns** | - The path to the file, or
nil if not found.
|
#### [reset](#reset)
| **Signature** | `cp.strings.source.plist:reset() -> cp.strings` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Clears any stored key values. |
+| **Type** | Method |
+| **Description** | Clears any stored key values. |
| **Parameters** | |
-| **Returns** | - The current `cp.strings` instance.
|
+| **Returns** | - The current
cp.strings instance.
|
diff --git a/api/cp/cp.strings.source.table.md b/api/cp/cp.strings.source.table.md
index 83ea751..31d9b4f 100644
--- a/api/cp/cp.strings.source.table.md
+++ b/api/cp/cp.strings.source.table.md
@@ -16,6 +16,8 @@ Note: This will load the file on each request. To have values cached, use the `c
* Constructors - API calls which return an object, typically one that offers API methods
* [new](#new)
* Methods - API calls which can only be made on an object returned by a constructor
+ * [add](#add)
+ * [context](#context)
* [find](#find)
## API Documentation
@@ -23,20 +25,36 @@ Note: This will load the file on each request. To have values cached, use the `c
### Constructors
#### [new](#new)
-| **Signature** | `cp.strings.source.table.new(language) -> source` |
+| **Signature** | `cp.strings.source.table.new(context) -> source` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new `cp.strings` source that loads strings from a plist file. |
-| **Parameters** | - `pathPattern` - The path to load from. May contain a special `${language}` marker which will be replace with the provided langauge when searching.
- `cacheSeconds` - (optional) How long in seconds to keep the loaded values cached in memory. Defaults to [defaultCacheSeconds](#defaultCacheSeconds)
|
-| **Returns** | - The new plist `source` instance.
|
+| **Type** | Constructor |
+| **Description** | Creates a new `cp.strings` source that loads strings from a plist file. |
+| **Parameters** | |
+| **Returns** | - The new plist
source instance.
|
### Methods
+#### [add](#add)
+| **Signature** | `cp.strings.source.table:add(keyValues) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Adds the specified table of key values in the specified language code. |
+| **Parameters** | keyValues - The table of key/value pairs to define.
|
+| **Returns** | |
+
+#### [context](#context)
+| **Signature** | `cp.strings.source.table:context([context]) -> table | self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets or sets a context to be set for the source. This typically includes a `language`, which |
+| **Parameters** | - context - A table with values which may be used by the source.
|
+| **Returns** | - If a new context is provided, the
cp.string.source is returned, otherwise the current context table is returned.
|
+
#### [find](#find)
-| **Signature** | `cp.strings.source.table:find(language) -> string` |
+| **Signature** | `cp.strings.source.table:find(key) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the specified `key` value in the plist file for the specified `language`, if the plist can be found, and contains matching key value. |
-| **Parameters** | - `language` - The language code to look for (e.g. `"en"`, or `"fr"`).
- `key` - The key to retrieve from the file.
|
-| **Returns** | - The value of the key, or `nil` if not found.
|
+| **Type** | Method |
+| **Description** | Finds the specified `key` value in the plist file for the specified optional `context`, |
+| **Parameters** | key - The key to retrieve the value for.context - An optional table with additional context.
|
+| **Returns** | - The value of the key, or
nil if not found.
|
diff --git a/api/cp/cp.test.md b/api/cp/cp.test.md
new file mode 100644
index 0000000..9697f17
--- /dev/null
+++ b/api/cp/cp.test.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.test
+---
+
+CommandPost Test Scripts.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.text.matcher.md b/api/cp/cp.text.matcher.md
index 17ae955..3943f08 100644
--- a/api/cp/cp.text.matcher.md
+++ b/api/cp/cp.text.matcher.md
@@ -1,7 +1,37 @@
# [docs](index.md) » cp.text.matcher
---
-This module provides support for loading, manipulating, and comparing unicode text data.
+Adapted from 'utf8.lua' (https://github.com/Stepets/utf8.lua)
+
+Copyright (c) 2006-2007, Kyle Smith
+All rights reserved.
+
+Contributors:
+ Alimov Stepan
+ David Peterson
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the author nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
## API Overview
* Constructors - API calls which return an object, typically one that offers API methods
@@ -19,43 +49,43 @@ This module provides support for loading, manipulating, and comparing unicode te
#### [matcher](#matcher)
| **Signature** | `cp.text.matcher(pattern[, plain]) -> cp.text.matcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Returns a matcher for the specified pattern. This follows the conventions of the standard [LUA Patterns](https://www.lua.org/pil/20.2.html) API. This will return a reusable, compiled parser for the given pattern. |
-| **Parameters** | - `pattern` - The pattern to parse
- `plain` - If `true`, the pattern is not parsed and the provided text must match exactly.
- Returns:
- * New `cp.text.matcher` for the pattern.
|
-| **Returns** | - * New `cp.text.matcher` for the pattern.
|
+| **Type** | Constructor |
+| **Description** | Returns a matcher for the specified pattern. This follows the conventions of the standard [LUA Patterns](https://www.lua.org/pil/20.2.html) API. This will return a reusable, compiled parser for the given pattern. |
+| **Parameters** | pattern - The pattern to parseplain - If true, the pattern is not parsed and the provided text must match exactly.Returns:- New
cp.text.matcher for the pattern.
|
+| **Returns** | - New
cp.text.matcher for the pattern.
|
### Methods
#### [find](#find)
| **Signature** | `cp.text.matcher:find(value[, start]) -> number, number, ...` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Processes the text, returning the start position, the end position, followed by any capture group values. |
-| **Parameters** | - `value` - The `cp.text` value to process.
- `start` - If specified, indicates the starting position to process from. Defaults to `1`.
|
-| **Returns** | - The start position for the match, end position, and the list of capture group values.
|
+| **Type** | Method |
+| **Description** | Processes the text, returning the start position, the end position, followed by any capture group values. |
+| **Parameters** | value - The cp.text value to process.start - If specified, indicates the starting position to process from. Defaults to 1.
|
+| **Returns** | - The start position for the match, end position, and the list of capture group values.
|
#### [gmatch](#gmatch)
| **Signature** | `cp.text.matcher:gmatch(value) -> function` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns an iterator function that, each time it is called, returns the next captures from pattern over string s. If pattern specifies no captures, then the whole match is produced in each call. |
-| **Parameters** | - `value` - The `cp.text` value to process.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Returns an iterator function that, each time it is called, returns the next captures from pattern over string s. If pattern specifies no captures, then the whole match is produced in each call. |
+| **Parameters** | value - The cp.text value to process.
|
+| **Returns** | |
#### [gsub](#gsub)
| **Signature** | `cp.text.matcher:gsub(value, repl, limit) -> text, number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a copy of `value` in which all (or the first `n`, if given) occurrences of the pattern have been replaced by a replacement string specified by `repl`, which can be text, a string, a table, or a function. gsub also returns, as its second value, the total number of matches that occurred. |
-| **Parameters** | - `value` - The text or string value to process.
- `repl` - The replacement text/string/table/function
- `limit` - The maximum number of times to do the replacement. Defaults to unlimited.
|
-| **Returns** | - `text` - The text value with replacements.
- `number` - The number of matches that occurred.
|
-| **Notes** | - If repl is text or a string, then its value is used for replacement. The character `%` works as an escape character: any sequence in repl of the form `%n`, with `n` between `1` and `9`, stands for the value of the `n`-th captured substring (see below). The sequence `%0` stands for the whole match. The sequence `%%` stands for a single `%`.
- If `repl` is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key.
- If `repl` is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument.
- If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is `false` or `nil`, then there is no replacement (that is, the original match is kept in the string).
|
+| **Type** | Method |
+| **Description** | Returns a copy of `value` in which all (or the first `n`, if given) occurrences of the pattern have been replaced by a replacement string specified by `repl`, which can be text, a string, a table, or a function. gsub also returns, as its second value, the total number of matches that occurred. |
+| **Parameters** | value - The text or string value to process.repl - The replacement text/string/table/functionlimit - The maximum number of times to do the replacement. Defaults to unlimited.
|
+| **Returns** | text - The text value with replacements.number - The number of matches that occurred.
|
+| **Notes** | - If repl is text or a string, then its value is used for replacement. The character
% works as an escape character: any sequence in repl of the form %n, with n between 1 and 9, stands for the value of the n-th captured substring (see below). The sequence %0 stands for the whole match. The sequence %% stands for a single %. - If
repl is a table, then the table is queried for every match, using the first capture as the key; if the pattern specifies no captures, then the whole match is used as the key. - If
repl is a function, then this function is called every time a match occurs, with all captured substrings passed as arguments, in order; if the pattern specifies no captures, then the whole match is passed as a sole argument. - If the value returned by the table query or by the function call is a string or a number, then it is used as the replacement string; otherwise, if it is
false or nil, then there is no replacement (that is, the original match is kept in the string).
|
#### [match](#match)
| **Signature** | `cp.text.matcher:match(value[, start]) -> ...` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Looks for the first match of the pattern in the string `value`. If it finds one, then match returns the captures from the pattern; otherwise it returns `nil`. If pattern specifies no captures, then the whole match is returned. A third, optional numerical argument init specifies where to start the search; its default value is `1` and can be negative. |
-| **Parameters** | - `value` - The `cp.text` value to process.
- `start` - If specified, indicates the starting position to process from. Defaults to `1`.
|
-| **Returns** | - The capture results, the whole match, or `nil`.
|
+| **Type** | Method |
+| **Description** | Looks for the first match of the pattern in the string `value`. If it finds one, then match returns the captures from the pattern; otherwise it returns `nil`. If pattern specifies no captures, then the whole match is returned. A third, optional numerical argument init specifies where to start the search; its default value is `1` and can be negative. |
+| **Parameters** | value - The cp.text value to process.start - If specified, indicates the starting position to process from. Defaults to 1.
|
+| **Returns** | - The capture results, the whole match, or
nil.
|
diff --git a/api/cp/cp.text.md b/api/cp/cp.text.md
index fb451e5..4448408 100644
--- a/api/cp/cp.text.md
+++ b/api/cp/cp.text.md
@@ -62,90 +62,90 @@ Note that `text` values are not in any specific encoding, since they are stored
#### [encoding](#encoding)
| **Signature** | `cp.text.encoding` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constant |
-| **Description** | The list of supported encoding formats: |
+| **Type** | Constant |
+| **Description** | The list of supported encoding formats: |
### Functions
#### [is](#is)
| **Signature** | `cp.text.is(value) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the provided value is a `text` instance. |
-| **Parameters** | - `value` - The value to check
|
-| **Returns** | - `true` if the value is a `text` instance.
|
+| **Type** | Function |
+| **Description** | Checks if the provided value is a `text` instance. |
+| **Parameters** | value - The value to check
|
+| **Returns** | true if the value is a text instance.
|
### Constructors
#### [char](#char)
| **Signature** | `cp.text.char(...) -> text` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Returns the list of one or more codepoint items into a text value, concatenating the results. |
-| **Parameters** | - `...` - The list of codepoint integers.
|
-| **Returns** | - The `cp.text` value for the list of codepoint values.
|
+| **Type** | Constructor |
+| **Description** | Returns the list of one or more codepoint items into a text value, concatenating the results. |
+| **Parameters** | ... - The list of codepoint integers.
|
+| **Returns** | - The
cp.text value for the list of codepoint values.
|
#### [fromCodepoints](#fromcodepoints)
| **Signature** | `cp.text.fromCodepoints(codepoints[, i[, j]]) -> text` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Returns a new `text` instance representing the specified array of codepoints. Since `i` and `j` default to the first |
-| **Parameters** | - `codepoints` - The array of codepoint integers.
- `i` - The starting index to read from codepoints. Defaults to `1`.
- `j` - The ending index to read from codepoints. Default to `-1`.
|
-| **Returns** | |
-| **Notes** | - You can use a *negative* value for `i` and `j`. If so, it will count back from then end of the `codepoints` array.
- If the codepoint array begins with a Byte-Order Marker (BOM), the BOM is skipped in the resulting text.
|
+| **Type** | Constructor |
+| **Description** | Returns a new `text` instance representing the specified array of codepoints. Since `i` and `j` default to the first |
+| **Parameters** | codepoints - The array of codepoint integers.i - The starting index to read from codepoints. Defaults to 1.j - The ending index to read from codepoints. Default to -1.
|
+| **Returns** | |
+| **Notes** | - You can use a negative value for
i and j. If so, it will count back from then end of the codepoints array. - If the codepoint array begins with a Byte-Order Marker (BOM), the BOM is skipped in the resulting text.
|
#### [fromFile](#fromfile)
| **Signature** | `cp.text.fromFile(path[, encoding]) -> text` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Returns a new `text` instance representing the text loaded from the specified path. If no encoding is specified, |
-| **Parameters** | - `value` - The value to turn into a unicode text instance.
- `encoding` - One of the falues from `text.encoding`: `utf8`, `utf16le`, or `utf16be`. Defaults to `utf8`.
|
-| **Returns** | |
+| **Type** | Constructor |
+| **Description** | Returns a new `text` instance representing the text loaded from the specified path. If no encoding is specified, |
+| **Parameters** | value - The value to turn into a unicode text instance.encoding - One of the falues from text.encoding: utf8, utf16le, or utf16be. Defaults to utf8.
|
+| **Returns** | |
#### [fromString](#fromstring)
| **Signature** | `cp.text.fromString(value[, encoding]) -> text` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Returns a new `text` instance representing the string value of the specified value. If no encoding is specified, |
-| **Parameters** | - `value` - The value to turn into a unicode text instance.
- `encoding` - One of the falues from `text.encoding`: `utf8`, `utf16le`, or `utf16be`. Defaults to `utf8`.
|
-| **Returns** | |
-| **Notes** | - Calling `text(value)` is the same as calling `text.fromString(value, text.encoding.utf8)`, so simple text can be initialized via `local x = text "foo"` when the `.lua` file's encoding is UTF-8.
|
+| **Type** | Constructor |
+| **Description** | Returns a new `text` instance representing the string value of the specified value. If no encoding is specified, |
+| **Parameters** | value - The value to turn into a unicode text instance.encoding - One of the falues from text.encoding: utf8, utf16le, or utf16be. Defaults to utf8.
|
+| **Returns** | |
+| **Notes** | - Calling
text(value) is the same as calling text.fromString(value, text.encoding.utf8), so simple text can be initialized via local x = text "foo" when the .lua file's encoding is UTF-8.
|
### Methods
#### [encode](#encode)
| **Signature** | `cp.text:encode([encoding]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the text as an encoded `string` value. |
-| **Parameters** | - `encoding` - The encoding to use when converting. Defaults to `cp.text.encoding.utf8`.
|
+| **Type** | Method |
+| **Description** | Returns the text as an encoded `string` value. |
+| **Parameters** | encoding - The encoding to use when converting. Defaults to cp.text.encoding.utf8.
|
#### [find](#find)
| **Signature** | `cp.text:find(pattern [, init [, plain]])` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Looks for the first match of pattern in the string `value`. If it finds a match, then find returns the indices of `value` where this occurrence starts and ends; otherwise, it returns `nil`. A third, optional numerical argument `init` specifies where to start the search; its default value is `1` and can be negative. A value of `true` as a fourth, optional argument plain turns off the pattern matching facilities, so the function does a plain "find substring" operation, with no characters in pattern being considered "magic". Note that if plain is given, then `init` must be given as well. |
-| **Returns** | - the start index, the end index, followed by any captures
|
+| **Type** | Method |
+| **Description** | Looks for the first match of pattern in the string `value`. If it finds a match, then find returns the indices of `value` where this occurrence starts and ends; otherwise, it returns `nil`. A third, optional numerical argument `init` specifies where to start the search; its default value is `1` and can be negative. A value of `true` as a fourth, optional argument plain turns off the pattern matching facilities, so the function does a plain "find substring" operation, with no characters in pattern being considered "magic". Note that if plain is given, then `init` must be given as well. |
+| **Returns** | - the start index, the end index, followed by any captures
|
#### [len](#len)
| **Signature** | `cp.text:len() -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the number of codepoints in the text. |
+| **Type** | Method |
+| **Description** | Returns the number of codepoints in the text. |
| **Parameters** | |
-| **Returns** | - The number of codepoints.
|
+| **Returns** | - The number of codepoints.
|
#### [match](#match)
| **Signature** | `cp.text:match(pattern[, start]) -> ...` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Looks for the first match of the `pattern` in the text value. If it finds one, then match returns the captures from the pattern; otherwise it returns `nil`. If pattern specifies no captures, then the whole match is returned. A third, optional numerical argument `init` specifies where to start the search; its default value is `1` and can be negative. |
-| **Parameters** | - `pattern` - The text pattern to process.
- `start` - If specified, indicates the starting position to process from. Defaults to `1`.
|
-| **Returns** | - The capture results, the whole match, or `nil`.
|
+| **Type** | Method |
+| **Description** | Looks for the first match of the `pattern` in the text value. If it finds one, then match returns the captures from the pattern; otherwise it returns `nil`. If pattern specifies no captures, then the whole match is returned. A third, optional numerical argument `init` specifies where to start the search; its default value is `1` and can be negative. |
+| **Parameters** | pattern - The text pattern to process.start - If specified, indicates the starting position to process from. Defaults to 1.
|
+| **Returns** | - The capture results, the whole match, or
nil.
|
#### [sub](#sub)
| **Signature** | `cp.text:sub(i [, j]) -> cp.text` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the substring of this text that starts at `i` and continues until `j`; `i` and `j` can be negative. |
+| **Type** | Method |
+| **Description** | Returns the substring of this text that starts at `i` and continues until `j`; `i` and `j` can be negative. |
diff --git a/api/cp/cp.time.flicks.md b/api/cp/cp.time.flicks.md
new file mode 100644
index 0000000..ad507d4
--- /dev/null
+++ b/api/cp/cp.time.flicks.md
@@ -0,0 +1,265 @@
+# [docs](index.md) » cp.time.flicks
+---
+
+Provides support for measuring time in `flicks`, a base unit of time useful for
+working with media, such as video or audio files.
+
+From the [Flicks GitHub project]():
+
+
+A flick (frame-tick) is a very small unit of time. It is 1/705600000 of a second, exactly.
+
+`1 flick = 1/705600000 second`
+
+This unit of time is the smallest time unit which is LARGER than a nanosecond, and can in integer quantities exactly
+represent a single frame duration for 24 Hz, 25 Hz, 30 Hz, 48 Hz, 50 Hz, 60 Hz, 90 Hz, 100 Hz, 120 Hz, and
+also 1/1000 divisions of each, as well as a single sample duration for 8 kHz, 16 kHz, 22.05 kHz, 24 kHz, 32 kHz,
+44.1 kHz, 48 kHz, 88.2 kHz, 96 kHz, and 192kHz, as well as the NTSC frame durations for 24 * (1000/1001) Hz,
+30 * (1000/1001) Hz, 60 * (1000/1001) Hz, and 120 * (1000/1001) Hz.
+
+That above was one hell of a run-on sentence, but it's strictly and completely correct in its description of
+the unit.
+
+This makes flicks suitable for use via std::chrono::duration and std::ratio for doing timing work against the
+system high resolution clock, which is in nanoseconds, but doesn't get slightly out of sync when doing
+common frame rates.
+
+We also support some common audio sample rates as well. This list is not exhaustive, but covers the majority
+of digital audio formats. They are 8kHz, 16kHz, 22.05kHz, 24kHz, 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz, and 192kHz.
+
+Though it is not part of the design criteria, 144 Hz, which some newer monitors refresh at, does work
+correctly with flicks.
+
+NTSC IS NOT EXPLICITLY SUPPORTED IN ALL OF ITS SUBTLE NUANCES, BUT: The NTSC variations (~23.976, ~29.97, etc)
+are approximately defined as 24 * 1000/1001 and 30 * 1000/1001, etc. These can be represented exactly in flicks,
+but 1/1000 divisions are not available.
+
+Many folks online have pointed out that NTSC technically has a variable frame rate, and that this is handled
+correctly in other media playback libraries such as QuickTime. The goal of flicks is to provide a simple,
+convenient std::chrono::duration to work with when writing code that works with simulation and time in media,
+but not explicitly to handle complex variable-rate playback scenarios. So we'll stick with the 1000/1001
+approximations, and leave it at that!
+
+# Details
+
+* 24 fps frame: 29400000 flicks
+* 25 fps frame: 28224000 flicks
+* 30 fps frame: 23520000 flicks
+* 48 fps frame: 14700000 flicks
+* 50 fps frame: 14112000 flicks
+* 60 fps frame: 11760000 flicks
+* 90 fps frame: 7840000 flicks
+* 100 fps frame: 7056000 flicks
+* 120 fps frame: 5880000 flicks
+* 8000 fps frame: 88200 flicks
+* 16000 fps frame: 44100 flicks
+* 22050 fps frame: 32000 flicks
+* 24000 fps frame: 29400 flicks
+* 32000 fps frame: 22050 flicks
+* 44100 fps frame: 16000 flicks
+* 48000 fps frame: 14700 flicks
+* 88200 fps frame: 8000 flicks
+* 96000 fps frame: 7350 flicks
+* 192000 fps frame: 3675 flicks
+
+# NTSC:
+
+* 24 * 1000/1001 (~23.976) fps frame: 29429400 flicks
+* 30 * 1000/1001 (~29.97) fps frame: 23543520 flicks
+* 60 * 1000/1001 (~59.94) fps frame: 11771760 flicks
+* 120 * 1000/1001 (~119.88) fps frame: 5885880 flicks
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [perFrame100](#perframe100)
+ * [perFrame120](#perframe120)
+ * [perFrame120NTSC](#perframe120ntsc)
+ * [perFrame24](#perframe24)
+ * [perFrame24NTSC](#perframe24ntsc)
+ * [perFrame25](#perframe25)
+ * [perFrame30](#perframe30)
+ * [perFrame30NTSC](#perframe30ntsc)
+ * [perFrame44100](#perframe44100)
+ * [perFrame48](#perframe48)
+ * [perFrame48000](#perframe48000)
+ * [perFrame50](#perframe50)
+ * [perFrame60](#perframe60)
+ * [perFrame60NTSC](#perframe60ntsc)
+ * [perFrame90](#perframe90)
+ * [perHour](#perhour)
+ * [perMinutes](#perminutes)
+ * [perSecond](#persecond)
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+ * [parse](#parse)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [toFrames](#toframes)
+ * [toSeconds](#toseconds)
+ * [toTimecode](#totimecode)
+
+## API Documentation
+
+### Constants
+
+#### [perFrame100](#perframe100)
+| **Signature** | `cp.time.flicks.perFrame100` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 100 fps. |
+
+#### [perFrame120](#perframe120)
+| **Signature** | `cp.time.flicks.perFrame120` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 120 fps. |
+
+#### [perFrame120NTSC](#perframe120ntsc)
+| **Signature** | `cp.time.flicks.perFrame120NTSC` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | An approximate for flicks in 1 frame at 120 fps in NTSC, a.k.a. ~119.88 fps. |
+
+#### [perFrame24](#perframe24)
+| **Signature** | `cp.time.flicks.perFrame24` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 24 fps. |
+
+#### [perFrame24NTSC](#perframe24ntsc)
+| **Signature** | `cp.time.flicks.perFrame24NTSC` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | An approximate for flicks in 1 frame at 24 fps in NTSC, a.k.a. 23.976 fps. |
+
+#### [perFrame25](#perframe25)
+| **Signature** | `cp.time.flicks.perFrame25` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 25 fps. |
+
+#### [perFrame30](#perframe30)
+| **Signature** | `cp.time.flicks.perFrame30` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 30 fps. |
+
+#### [perFrame30NTSC](#perframe30ntsc)
+| **Signature** | `cp.time.flicks.perFrame30NTSC` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | An approximate for flicks in 1 frame at 30 fps in NTSC, a.k.a. 29.97 fps. |
+
+#### [perFrame44100](#perframe44100)
+| **Signature** | `cp.time.flicks.perFrame44100` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 44100 fps, a.k.a. 44.1 Hz. |
+
+#### [perFrame48](#perframe48)
+| **Signature** | `cp.time.flicks.perFrame48` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 48 fps. |
+
+#### [perFrame48000](#perframe48000)
+| **Signature** | `cp.time.flicks.perFrame48000` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 44100 fps, a.k.a. 48 Hz. |
+
+#### [perFrame50](#perframe50)
+| **Signature** | `cp.time.flicks.perFrame50` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 50 fps. |
+
+#### [perFrame60](#perframe60)
+| **Signature** | `cp.time.flicks.perFrame60` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 60 fps. |
+
+#### [perFrame60NTSC](#perframe60ntsc)
+| **Signature** | `cp.time.flicks.perFrame60NTSC` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | An approximate for flicks in 1 frame at 60 fps in NTSC, a.k.a. 59.94 fps. |
+
+#### [perFrame90](#perframe90)
+| **Signature** | `cp.time.flicks.perFrame90` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 frame at 90 fps. |
+
+#### [perHour](#perhour)
+| **Signature** | `cp.time.flicks.perHour` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 hour. |
+
+#### [perMinutes](#perminutes)
+| **Signature** | `cp.time.flicks.perMinutes` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 minute. |
+
+#### [perSecond](#persecond)
+| **Signature** | `cp.time.flicks.perSecond` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The number of flicks in 1 second. |
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.time.flicks.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `flicks` instance. |
+| **Parameters** | - thing - the thing to check
|
+| **Returns** | true if the thingis a flicks instance, otherwise false.
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.time.flicks.new(value) -> flicks` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `flicks` instance. By default, the unit is in flicks`, but can be set as a |
+| **Parameters** | - value - the base value to set to
|
+| **Returns** | |
+
+#### [parse](#parse)
+| **Signature** | `cp.time.flicks.parse(timecodeString, framerate) -> flicks` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Attempts to parse the timecode string value with the specified framerate. |
+| **Parameters** | - timecodeString - The timecode as a string.
- framerate - The number of frames per second.
|
+| **Returns** | - a new
flicks instance for the timecode.
|
+
+### Methods
+
+#### [toFrames](#toframes)
+| **Signature** | `cp.time.flicks:toFrames(framerate) --> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Converts the flicks into a number for the specific framerate. |
+
+#### [toSeconds](#toseconds)
+| **Signature** | `cp.time.flicks:toSeconds() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Converts the flicks into a decimal value of the number of seconds it represents. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [toTimecode](#totimecode)
+| **Signature** | `cp.time.flicks:toTimecode(framerate[, delimeter]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Converts the flicks into a string of the format "HH[:]MM[:]SS[:;]FF", with hours, minutes and frames listed respectively. |
+| **Parameters** | - framerate - the framerate to use when calculating frames per second.
- delimeter - either
nil (default), ":", or ";".
|
+| **Returns** | |
+
diff --git a/api/cp/cp.tools.md b/api/cp/cp.tools.md
index bd6499e..2348094 100644
--- a/api/cp/cp.tools.md
+++ b/api/cp/cp.tools.md
@@ -5,15 +5,27 @@ A collection of handy miscellaneous tools for Lua development.
## API Overview
* Functions - API calls offered directly by the extension
+ * [camelCase](#camelcase)
+ * [centre](#centre)
* [cleanupButtonText](#cleanupbuttontext)
+ * [contentsInsideBrackets](#contentsinsidebrackets)
+ * [convertSingleHexStringToDecimalString](#convertsinglehexstringtodecimalstring)
+ * [dirFiles](#dirfiles)
* [doesDirectoryExist](#doesdirectoryexist)
* [doesFileExist](#doesfileexist)
* [doubleLeftClick](#doubleleftclick)
+ * [endsWith](#endswith)
+ * [ensureDirectoryExists](#ensuredirectoryexists)
+ * [exactMatch](#exactmatch)
* [executeWithAdministratorPrivileges](#executewithadministratorprivileges)
+ * [findCommonWordWithinTwoStrings](#findcommonwordwithintwostrings)
+ * [firstToUpper](#firsttoupper)
* [getEmail](#getemail)
* [getExternalDevices](#getexternaldevices)
+ * [getFileExtensionFromPath](#getfileextensionfrompath)
* [getFilenameFromPath](#getfilenamefrompath)
* [getFullname](#getfullname)
+ * [getKeysSortedByValue](#getkeyssortedbyvalue)
* [getmacOSVersion](#getmacosversion)
* [getModelName](#getmodelname)
* [getRAMSize](#getramsize)
@@ -21,381 +33,679 @@ A collection of handy miscellaneous tools for Lua development.
* [getThunderboltDevices](#getthunderboltdevices)
* [getUSBDevices](#getusbdevices)
* [getVRAMSize](#getvramsize)
+ * [hexStringToString](#hexstringtostring)
* [iconFallback](#iconfallback)
* [incrementFilename](#incrementfilename)
+ * [incrementFilenameInPath](#incrementfilenameinpath)
+ * [isNumberString](#isnumberstring)
* [isOffScreen](#isoffscreen)
* [leftClick](#leftclick)
* [lines](#lines)
+ * [lower](#lower)
* [macOSVersion](#macosversion)
* [mergeTable](#mergetable)
- * [modifierMaskToModifiers](#modifiermasktomodifiers)
- * [modifierMatch](#modifiermatch)
* [ninjaDoubleClick](#ninjadoubleclick)
* [ninjaMouseAction](#ninjamouseaction)
* [ninjaMouseClick](#ninjamouseclick)
+ * [ninjaRightMouseClick](#ninjarightmouseclick)
* [numberToWord](#numbertoword)
+ * [optionPressed](#optionpressed)
+ * [playErrorSound](#playerrorsound)
+ * [readFromFile](#readfromfile)
* [removeFilenameFromPath](#removefilenamefrompath)
* [removeFromTable](#removefromtable)
+ * [replace](#replace)
+ * [rescale](#rescale)
+ * [rightClick](#rightclick)
* [rmdir](#rmdir)
* [round](#round)
* [safeFilename](#safefilename)
+ * [shiftPressed](#shiftpressed)
+ * [spairs](#spairs)
* [split](#split)
* [splitOnColumn](#splitoncolumn)
+ * [startsWith](#startswith)
* [stringMaxLength](#stringmaxlength)
+ * [stringToHexString](#stringtohexstring)
* [tableContains](#tablecontains)
* [tableCount](#tablecount)
+ * [tableFilter](#tablefilter)
+ * [tableMatch](#tablematch)
+ * [toRegionalNumber](#toregionalnumber)
+ * [toRegionalNumberString](#toregionalnumberstring)
* [trim](#trim)
* [unescape](#unescape)
+ * [upper](#upper)
* [urlQueryStringDecode](#urlquerystringdecode)
* [volumeFormat](#volumeformat)
+ * [writeToFile](#writetofile)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [escapeTilda](#escapetilda)
+ * [keyStroke](#keystroke)
+ * [pressSystemKey](#presssystemkey)
## API Documentation
### Functions
+#### [camelCase](#camelcase)
+| **Signature** | `cp.tools.camelCase(str) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts the supplied string to camelcase. |
+| **Parameters** | - str - The string you want to manipulate
|
+| **Returns** | |
+
+#### [centre](#centre)
+| **Signature** | `cp.tools.centre(frame) -> hs.geometry point` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the centre point of a frame. |
+| **Parameters** | - frame - an
hs.geometry rect
|
+| **Returns** | |
+
#### [cleanupButtonText](#cleanupbuttontext)
| **Signature** | `cp.tools.cleanupButtonText(value) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Removes the … symbol and multiple >'s from a string. |
+| **Type** | Function |
+| **Description** | Removes the … symbol and multiple >'s from a string. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
+
+#### [contentsInsideBrackets](#contentsinsidebrackets)
+| **Signature** | `cp.tools.contentsInsideBrackets(value) -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the contents of any text inside the first bracket set. |
+| **Parameters** | - value - The string to process
|
+| **Returns** | - The contents as a string or
nil
|
+
+#### [convertSingleHexStringToDecimalString](#convertsinglehexstringtodecimalstring)
+| **Signature** | `cp.tools.convertSingleHexStringToDecimalString(hex) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts a single hex string (i.e. "3") to a binary string (i.e. "0011") |
+| **Parameters** | - hex - A single string character
|
+| **Returns** | |
+
+#### [dirFiles](#dirfiles)
+| **Signature** | `cp.tools.dirFiles(path) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets all the files in a directory |
+| **Parameters** | |
+| **Returns** | - A table containing filenames as strings, or
nil followed by the error message if an error occurs.
|
#### [doesDirectoryExist](#doesdirectoryexist)
| **Signature** | `cp.tools.doesDirectoryExist(path) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns whether or not a directory exists. |
+| **Type** | Function |
+| **Description** | Returns whether or not a directory exists. |
| **Parameters** | - path - Path to the directory
|
-| **Returns** | - `true` if the directory exists otherwise `false`
|
+| **Returns** | true if the directory exists otherwise false
|
#### [doesFileExist](#doesfileexist)
| **Signature** | `cp.tools.doesFileExist(path) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns whether or not a file exists. |
+| **Type** | Function |
+| **Description** | Returns whether or not a file exists. |
| **Parameters** | |
-| **Returns** | - `true` if the file exists otherwise `false`
|
+| **Returns** | true if the file exists otherwise false
|
#### [doubleLeftClick](#doubleleftclick)
| **Signature** | `cp.tools.doubleLeftClick(point[, delay]) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs a Left Mouse Double Click. |
+| **Type** | Function |
+| **Description** | Performs a Left Mouse Double Click. |
| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- delay - The optional delay between multiple mouse clicks
|
-| **Returns** | |
+| **Returns** | |
+
+#### [endsWith](#endswith)
+| **Signature** | `cp.tools.endsWith(str, ending) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if `str` has the same ending as `ending`. |
+| **Parameters** | - str - String to analysis
- ending - End of string to compare against
|
+| **Returns** | |
+
+#### [ensureDirectoryExists](#ensuredirectoryexists)
+| **Signature** | `cp.tools.ensureDirectoryExists(rootPath, ...) -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Ensures all steps on a provided path exist. If not, attempts to create them. |
+| **Parameters** | rootPath - The root path... - The list of path steps to create
|
+| **Returns** | - The full path, if it exists, or
nil if unable to create the directory for some reason.
|
+
+#### [exactMatch](#exactmatch)
+| **Signature** | `cp.tools.exactMatch(value, pattern, plain) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Compares two strings to see if they're an exact match. |
+| **Parameters** | - value - The first string
- pattern - The second string, including any patterns
- plain - Whether or not to ignore patterns. Defaults to
false. - ignoreCase - Ignore the case of the value & pattern.
|
+| **Returns** | true if there's an exact match, otherwise false.
|
#### [executeWithAdministratorPrivileges](#executewithadministratorprivileges)
| **Signature** | `cp.tools.executeWithAdministratorPrivileges(input[, stopOnError]) -> boolean or string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Executes a single or multiple shell commands with Administrator Privileges. |
+| **Type** | Function |
+| **Description** | Executes a single or multiple shell commands with Administrator Privileges. |
| **Parameters** | - input - either a string or a table of strings of commands you want to execute
- stopOnError - an optional variable that stops processing multiple commands when an individual commands returns an error
|
-| **Returns** | - `true` if successful, `false` if cancelled and a string if there's an error.
|
+| **Returns** | true if successful, false if cancelled and a string if there's an error.
|
+
+#### [findCommonWordWithinTwoStrings](#findcommonwordwithintwostrings)
+| **Signature** | `cp.tools.findCommonWordWithinTwoStrings(a, b) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds a common word within two strings. |
+| **Parameters** | - a - The first string
- b - The second string
|
+| **Returns** | - The first common word that's found or
nil if something goes wrong.
|
+
+#### [firstToUpper](#firsttoupper)
+| **Signature** | `cp.tools.firstToUpper(str) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Makes the first letter of a string uppercase. |
+| **Parameters** | - str - The string you want to manipulate
|
+| **Returns** | |
#### [getEmail](#getemail)
| **Signature** | `cp.tools.getEmail() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the current users Email, otherwise an empty string. |
+| **Type** | Function |
+| **Description** | Returns the current users Email, otherwise an empty string. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getExternalDevices](#getexternaldevices)
| **Signature** | `cp.tools.getExternalDevices() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a string of USB & Thunderbolt Devices. |
+| **Type** | Function |
+| **Description** | Returns a string of USB & Thunderbolt Devices. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
-#### [getFilenameFromPath](#getfilenamefrompath)
-| **Signature** | `cp.tools.getFilenameFromPath(input) -> string` |
+#### [getFileExtensionFromPath](#getfileextensionfrompath)
+| **Signature** | `cp.tools.getFileExtensionFromPath(input) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Gets the filename component of a path. |
+| **Type** | Function |
+| **Description** | Gets the file extension from a path. |
| **Parameters** | |
-| **Returns** | - A string of the filename.
|
+| **Returns** | - A string of the file extension.
|
+
+#### [getFilenameFromPath](#getfilenamefrompath)
+| **Signature** | `cp.tools.getFilenameFromPath(input[, removeExtension]) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets the filename component of a path. |
+| **Parameters** | - input - The path
- removeExtension - (optional) set to
true if the file extension should be removed
|
+| **Returns** | - A string of the filename.
|
#### [getFullname](#getfullname)
| **Signature** | `cp.tools.getFullname() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the current users Full Name, otherwise an empty string. |
+| **Type** | Function |
+| **Description** | Returns the current users Full Name, otherwise an empty string. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
+
+#### [getKeysSortedByValue](#getkeyssortedbyvalue)
+| **Signature** | `cp.tools.getKeysSortedByValue(tbl, sortFunction) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Sorts table keys by a value |
+| **Parameters** | - tbl - the table you want to sort
- sortFunction - the function you want to use to sort the table
|
+| **Returns** | |
#### [getmacOSVersion](#getmacosversion)
| **Signature** | `cp.tools.getmacOSVersion() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns macOS Version. |
+| **Type** | Function |
+| **Description** | Returns the macOS Version in the format that Apple's Feedback Form expects. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - The macOS version as a string or "" if unknown.
|
#### [getModelName](#getmodelname)
| **Signature** | `cp.tools.getModelName() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns Model Name of Hardware. |
+| **Type** | Function |
+| **Description** | Returns Model Name of Hardware. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getRAMSize](#getramsize)
| **Signature** | `cp.tools.getRAMSize() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns RAM Size. |
+| **Type** | Function |
+| **Description** | Returns RAM Size in a format Apple's Feedback form expects. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | - The RAM size as a string, or "" if unknown.
|
#### [getScreenshotsAsBase64](#getscreenshotsasbase64)
| **Signature** | `cp.tools.getScreenshotsAsBase64() -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Captures all available screens and saves them as base64 encodes in a table. |
+| **Type** | Function |
+| **Description** | Captures all available screens and saves them as base64 encodes in a table. |
| **Parameters** | |
-| **Returns** | - A table containing base64 images of all available screens.
|
+| **Returns** | - A table containing base64 images of all available screens.
|
#### [getThunderboltDevices](#getthunderboltdevices)
| **Signature** | `cp.tools.getThunderboltDevices() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a string of Thunderbolt Devices. |
+| **Type** | Function |
+| **Description** | Returns a string of Thunderbolt Devices. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getUSBDevices](#getusbdevices)
| **Signature** | `cp.tools.getUSBDevices() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a string of USB Devices. |
+| **Type** | Function |
+| **Description** | Returns a string of USB Devices. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [getVRAMSize](#getvramsize)
| **Signature** | `cp.tools.getVRAMSize() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the VRAM size in format suitable for Apple's Final Cut Pro feedback form or "" if unknown. |
+| **Type** | Function |
+| **Description** | Returns the VRAM size in format suitable for Apple's Final Cut Pro feedback form or "" if unknown. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
+
+#### [hexStringToString](#hexstringtostring)
+| **Signature** | `cp.tools.hexStringToString(value) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts a hex string to a string. |
+| **Parameters** | - value - The string to convert
|
+| **Returns** | |
#### [iconFallback](#iconfallback)
| **Signature** | `cp.tools.iconFallback(paths) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Excepts one or more paths to an icon, checks to see if they exist (in the order that they're given), and if none exist, returns the CommandPost icon path. |
+| **Type** | Function |
+| **Description** | Excepts one or more paths to an icon, checks to see if they exist (in the order that they're given), and if none exist, returns the CommandPost icon path. |
| **Parameters** | - paths - One or more paths to an icon
|
-| **Returns** | |
+| **Returns** | |
#### [incrementFilename](#incrementfilename)
| **Signature** | `cp.tools.incrementFilename(value) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a table of file names for the given path. |
-| **Parameters** | |
-| **Returns** | - A table containing filenames as strings.
|
+| **Type** | Function |
+| **Description** | Increments the filename. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [incrementFilenameInPath](#incrementfilenameinpath)
+| **Signature** | `cp.tools.incrementFilenameInPath(path) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Increments the filename as it appears in a path. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [isNumberString](#isnumberstring)
+| **Signature** | `cp.tools.isNumberString(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns whether or not value is a number string. |
+| **Parameters** | - value - the string you want to check
|
+| **Returns** | true if value is a number string, otherwise false.
|
#### [isOffScreen](#isoffscreen)
| **Signature** | `cp.tools.isOffScreen(rect) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Determines if the given rect is off screen or not. |
+| **Type** | Function |
+| **Description** | Determines if the given rect is off screen or not. |
| **Parameters** | - rect - the rect you want to check
|
-| **Returns** | - `true` if offscreen otherwise `false`
|
+| **Returns** | true if offscreen otherwise false
|
#### [leftClick](#leftclick)
| **Signature** | `cp.tools.leftClick(point[, delay, clickNumber]) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs a Left Mouse Click. |
+| **Type** | Function |
+| **Description** | Performs a Left Mouse Click. |
| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- delay - The optional delay between multiple mouse clicks
- clickNumber - The optional number of times you want to perform the click.
|
-| **Returns** | |
+| **Returns** | |
#### [lines](#lines)
-| **Signature** | `cp.tools.lines(string) -> table` |
+| **Signature** | `cp.tools.lines(string) -> table | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Splits a string containing multiple lines of text into a table. |
+| **Type** | Function |
+| **Description** | Splits a string containing multiple lines of text into a table. |
| **Parameters** | - string - the string you want to process
|
-| **Returns** | |
+| **Returns** | - A table or
nil if the parameter is not a string.
|
+
+#### [lower](#lower)
+| **Signature** | `cp.tools.lower(str) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts the supplied string to lowercase. |
+| **Parameters** | - str - The string you want to manipulate
|
+| **Returns** | |
#### [macOSVersion](#macosversion)
| **Signature** | `cp.tools.macOSVersion() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a the macOS Version as a single string. |
+| **Type** | Function |
+| **Description** | Returns a the macOS Version as a single string. |
| **Parameters** | |
-| **Returns** | - A string containing the macOS version
|
+| **Returns** | - A string containing the macOS version
|
#### [mergeTable](#mergetable)
| **Signature** | `cp.tools.mergeTable(target, ...) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Gives you the file system volume format of a path. |
-| **Parameters** | - target - The target table
- ... - Any other tables you want to merge into target
|
-| **Returns** | |
-
-#### [modifierMaskToModifiers](#modifiermasktomodifiers)
-| **Signature** | `cp.tools.modifierMaskToModifiers() -> table` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Translate Keyboard Modifiers from Apple's Plist Format into Hammerspoon Format |
-| **Parameters** | |
-| **Returns** | |
-
-#### [modifierMatch](#modifiermatch)
-| **Signature** | `cp.tools.modifierMatch(inputA, inputB) -> boolean` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Compares two modifier tables. |
-| **Parameters** | - inputA - table of modifiers
- inputB - table of modifiers
|
-| **Returns** | - `true` if there's a match otherwise `false`
|
-| **Notes** | - This function only takes into account 'ctrl', 'alt', 'cmd', 'shift'.
|
+| **Type** | Function |
+| **Description** | Merges multiple tables into a target table. |
+| **Parameters** | - target - The target table
- ... - Any other tables you want to merge into target
|
+| **Returns** | |
#### [ninjaDoubleClick](#ninjadoubleclick)
| **Signature** | `cp.tools.ninjaDoubleClick(point[, delay]) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs a mouse double click, but returns the mouse to the original position without the users knowledge. |
+| **Type** | Function |
+| **Description** | Performs a mouse double click, but returns the mouse to the original position without the users knowledge. |
| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- delay - The optional delay between multiple mouse clicks
|
-| **Returns** | |
+| **Returns** | |
#### [ninjaMouseAction](#ninjamouseaction)
| **Signature** | `cp.tools.ninjaMouseAction(point, fn) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Moves the mouse to a point, performs a function, then returns the mouse to the original point. |
+| **Type** | Function |
+| **Description** | Moves the mouse to a point, performs a function, then returns the mouse to the original point. |
| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- fn - A function you want to perform
|
-| **Returns** | |
+| **Returns** | |
#### [ninjaMouseClick](#ninjamouseclick)
| **Signature** | `cp.tools.ninjaMouseClick(point[, delay]) -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Performs a mouse click, but returns the mouse to the original position without the users knowledge. |
+| **Type** | Function |
+| **Description** | Performs a mouse click, but returns the mouse to the original position without the users knowledge. |
+| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- delay - The optional delay between multiple mouse clicks
|
+| **Returns** | |
+
+#### [ninjaRightMouseClick](#ninjarightmouseclick)
+| **Signature** | `cp.tools.ninjaRightMouseClick(point[, delay]) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Performs a right mouse click, but returns the mouse to the original position without the users knowledge. |
| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- delay - The optional delay between multiple mouse clicks
|
-| **Returns** | |
+| **Returns** | |
#### [numberToWord](#numbertoword)
-| **Signature** | `cp.tools.numberToWord(str) -> string` |
+| **Signature** | `cp.tools.numberToWord(number) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Makes the first letter of a string uppercase. |
-| **Parameters** | - str - The string you want to manipulate
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Converts a number to a string (i.e. 1 becomes "One"). |
+| **Parameters** | - number - A whole number between 0 and 10
|
+| **Returns** | |
+
+#### [optionPressed](#optionpressed)
+| **Signature** | `cp.tools.optionPressed() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Is the Option Key being pressed? |
+| **Parameters** | |
+| **Returns** | true if the option key is being pressed, otherwise false.
|
+
+#### [playErrorSound](#playerrorsound)
+| **Signature** | `cp.tools.playErrorSound() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Plays the "Funk" error sound. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [readFromFile](#readfromfile)
+| **Signature** | `cp.tools.readFromFile(path) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Read data from file. |
+| **Parameters** | - path - The path of where you want to load the file.
|
+| **Returns** | |
#### [removeFilenameFromPath](#removefilenamefrompath)
| **Signature** | `cp.tools.removeFilenameFromPath(string) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Removes the filename from a path. |
+| **Type** | Function |
+| **Description** | Removes the filename from a path. |
| **Parameters** | |
-| **Returns** | - A string of the path without the filename.
|
+| **Returns** | - A string of the path without the filename.
|
#### [removeFromTable](#removefromtable)
| **Signature** | `cp.tools.removeFromTable(table, element) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Removes a string from a table of strings |
+| **Type** | Function |
+| **Description** | Removes a string from a table of strings |
| **Parameters** | - table - the table you want to check
- element - the string you want to remove
|
-| **Returns** | |
+| **Returns** | |
+
+#### [replace](#replace)
+| **Signature** | `cp.tools.replace(text, old, new) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | A find and replace feature that doesn't use patterns. |
+| **Parameters** | - text - The string you want to process
- old - The string you want to find
- new - The new string you want to replace the old string with
|
+| **Returns** | |
+
+#### [rescale](#rescale)
+| **Signature** | `cp.tools.rescale(value, inMin, inMax, outMin, outMax) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Takes an input, rescales it, and provides a new output. |
+| **Parameters** | - value - The value you want to process as a number
- inMin - The minimum value of the input as a number
- inMax - The maximum value of the input as a number
- outMin - The minimum value of the output as a number
- outMax - The maximum value of the output as a number
|
+| **Returns** | - The rescaled value as a number or
nil.
|
+
+#### [rightClick](#rightclick)
+| **Signature** | `cp.tools.rightClick(point[, delay, clickNumber]) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Performs a Right Mouse Click. |
+| **Parameters** | - point - A point-table containing the absolute x and y co-ordinates to move the mouse pointer to
- delay - The optional delay between multiple mouse clicks
- clickNumber - The optional number of times you want to perform the click.
|
+| **Returns** | |
#### [rmdir](#rmdir)
| **Signature** | `cp.tools.rmdir(path[, recursive]) -> true | nil, err` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Attempts to remove the directory at the specified path, optionally removing |
-| **Parameters** | - * `path` - The absolute path to remove
- * `recursive` - If `true`, the contents of the directory will be removed first.
|
-| **Returns** | - * `true` if successful, or `nil, err` if there was a problem.
|
+| **Type** | Function |
+| **Description** | Attempts to remove the directory at the specified path, optionally removing |
+| **Parameters** | path - The absolute path to removerecursive - If true, the contents of the directory will be removed first.
|
+| **Returns** | true if successful, or nil, err if there was a problem.
|
#### [round](#round)
| **Signature** | `cp.tools.round(num, numDecimalPlaces) -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Rounds a number to a set number of decimal places |
+| **Type** | Function |
+| **Description** | Rounds a number to a set number of decimal places |
| **Parameters** | - num - The number you want to round
- numDecimalPlaces - How many numbers of decimal places (defaults to 0)
|
-| **Returns** | |
+| **Returns** | |
#### [safeFilename](#safefilename)
| **Signature** | `cp.tools.safeFilename(value[, defaultValue]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns a Safe Filename. |
+| **Type** | Function |
+| **Description** | Returns a Safe Filename. |
| **Parameters** | - value - a string you want to make safe
- defaultValue - the optional default filename to use if the value is not valid
|
-| **Returns** | - A string of the safe filename
|
-| **Notes** | - Returns "filename" is both `value` and `defaultValue` are `nil`.
|
+| **Returns** | - A string of the safe filename
|
+| **Notes** | - Returns "filename" is both
value and defaultValue are nil.
|
+
+#### [shiftPressed](#shiftpressed)
+| **Signature** | `cp.tools.shiftPressed() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Is the Shift Key being pressed? |
+| **Parameters** | |
+| **Returns** | true if the shift key is being pressed, otherwise false.
|
+
+#### [spairs](#spairs)
+| **Signature** | `cp.tools.spairs(t, order) -> function` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | A customised version of pairs, called `spairs` because it iterates over the table in a sorted order. |
+| **Parameters** | - t - The table to process
- order - The function of how to sort the table.
|
+| **Returns** | |
+| **Notes** | |
#### [split](#split)
| **Signature** | `cp.tools.split(str, pat) -> table` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Splits a string with a pattern. |
+| **Type** | Function |
+| **Description** | Splits a string with a pattern. |
| **Parameters** | - str - The string to split
- pat - The pattern
|
-| **Returns** | |
+| **Returns** | |
#### [splitOnColumn](#splitoncolumn)
| **Signature** | `cp.tools.splitOnColumn() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Splits a string on a column. |
+| **Type** | Function |
+| **Description** | Splits a string on a column. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
+
+#### [startsWith](#startswith)
+| **Signature** | `cp.tools.startsWith(value, startValue) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if a string starts with a value. |
+| **Parameters** | - value - The value to check
- startValue - The value to look for
|
+| **Returns** | true if value starts with the startValue, otherwise false
|
#### [stringMaxLength](#stringmaxlength)
| **Signature** | `cp.tools.stringMaxLength(string, maxLength[, optionalEnd]) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Trims a string based on a maximum length. |
+| **Type** | Function |
+| **Description** | Trims a string based on a maximum length. |
| **Parameters** | - maxLength - The length of the string as a number
- optionalEnd - A string that is applied to the end of the input string if the input string is larger than the maximum length.
|
-| **Returns** | |
+| **Returns** | |
+
+#### [stringToHexString](#stringtohexstring)
+| **Signature** | `cp.tools.stringToHexString(value) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts a string to a hex string. |
+| **Parameters** | - value - The string to convert
|
+| **Returns** | |
#### [tableContains](#tablecontains)
| **Signature** | `cp.tools.tableContains(table, element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Does a element exist in a table? |
+| **Type** | Function |
+| **Description** | Does a element exist in a table? |
| **Parameters** | - table - the table you want to check
- element - the element you want to check for
|
-| **Returns** | |
+| **Returns** | |
#### [tableCount](#tablecount)
| **Signature** | `cp.tools.tableCount(table) -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns how many items are in a table. |
+| **Type** | Function |
+| **Description** | Returns how many items are in a table. |
| **Parameters** | - table - The table you want to count.
|
-| **Returns** | - The number of items in the table.
|
+| **Returns** | - The number of items in the table.
|
+| **Notes** | - If something other than a table is supplied, this function will return 0.
|
+
+#### [tableFilter](#tablefilter)
+| **Signature** | `cp.tools.tableFilter(t, matchFn) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Efficiently filters out all elements from the table `t` which to not match the `matchFn`. |
+| **Parameters** | - t - The
table to filter. - matchFn - A function which will receive the table, the current index, and the target index.
|
+| **Returns** | |
+
+#### [tableMatch](#tablematch)
+| **Signature** | `cp.tools.tableMatch(t1, t2[, ignoreMetatable]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Compares two tables. |
+| **Parameters** | - t1 - The first table.
- t2 - The second table.
- ignoreMetatable - A boolean that determines whether or not we should ignore the metatable.
|
+| **Returns** | true if t1 and t2 are identical, otherwise false.
|
+
+#### [toRegionalNumber](#toregionalnumber)
+| **Signature** | `cp.tools.toRegionalNumber(value) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Takes a string and converts it into a number, with the correct |
+| **Parameters** | - value - The value you want to process as a string.
|
+| **Returns** | - The value as a number or
nil.
|
+
+#### [toRegionalNumberString](#toregionalnumberstring)
+| **Signature** | `cp.tools.toRegionalNumberString(value) -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Takes a number and converts it into a string, with the correct |
+| **Parameters** | - value - The value you want to process as a number.
|
+| **Returns** | - The value as a number or
nil.
|
#### [trim](#trim)
| **Signature** | `cp.tools.trim(string) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Trims the whitespaces from a string |
+| **Type** | Function |
+| **Description** | Trims the whitespaces from a string |
| **Parameters** | - string - the string you want to trim
|
-| **Returns** | |
+| **Returns** | |
#### [unescape](#unescape)
| **Signature** | `cp.tools.unescape(str) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Removes any URL encoding in the provided string. |
+| **Type** | Function |
+| **Description** | Removes any URL encoding in the provided string. |
| **Parameters** | - str - the string to decode
|
-| **Returns** | - A string with all "+" characters converted to spaces and all percent encoded sequences converted to their ASCII equivalents.
|
+| **Returns** | - A string with all "+" characters converted to spaces and all percent encoded sequences converted to their ASCII equivalents.
|
+
+#### [upper](#upper)
+| **Signature** | `cp.tools.upper(str) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Converts the supplied string to uppercase. |
+| **Parameters** | - str - The string you want to manipulate
|
+| **Returns** | |
#### [urlQueryStringDecode](#urlquerystringdecode)
| **Signature** | `cp.tools.urlQueryStringDecode() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Decodes a URL Query String |
+| **Type** | Function |
+| **Description** | Decodes a URL Query String |
| **Parameters** | |
-| **Returns** | - Decoded URL Query String as string
|
+| **Returns** | - Decoded URL Query String as string
|
#### [volumeFormat](#volumeformat)
| **Signature** | `cp.tools.volumeFormat(path) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Gives you the file system volume format of a path. |
+| **Type** | Function |
+| **Description** | Gives you the file system volume format of a path. |
| **Parameters** | - path - the path you want to check as a string
|
-| **Returns** | - The `NSURLVolumeLocalizedFormatDescriptionKey` as a string, otherwise `nil`.
|
+| **Returns** | - The
NSURLVolumeLocalizedFormatDescriptionKey as a string, otherwise nil.
|
+
+#### [writeToFile](#writetofile)
+| **Signature** | `cp.tools.writeToFile(path, data) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Write data to a file at a given path. |
+| **Parameters** | - path - The path to the file you want to write to.
- data - The data to write to the file.
|
+| **Returns** | |
+
+### Methods
+
+#### [escapeTilda](#escapetilda)
+| **Signature** | `cp.tools.escapeTilda(input) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Escapes a tilda. |
+| **Parameters** | - input - The string you want to escape.
|
+| **Returns** | |
+
+#### [keyStroke](#keystroke)
+| **Signature** | `cp.tools.keyStroke(modifiers, character, app) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Generates and emits a single keystroke event pair for the supplied keyboard |
+| **Parameters** | - modifiers - A table containing the keyboard modifiers to apply ("fn", "ctrl", "alt", "cmd" or "shift")
- character - A string containing a character to be emitted
- app - The optional
hs.application you want to target
|
+| **Returns** | |
+
+#### [pressSystemKey](#presssystemkey)
+| **Signature** | `cp.tools.pressSystemKey(key) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Virtually presses a system key. |
+| **Parameters** | |
+| **Returns** | - Supported key values are:
- SOUND_UP
- SOUND_DOWN
- MUTE
- BRIGHTNESS_UP
- BRIGHTNESS_DOWN
- CONTRAST_UP
- CONTRAST_DOWN
- POWER
- LAUNCH_PANEL
- VIDMIRROR
- PLAY
- EJECT
- NEXT
- PREVIOUS
- FAST
- REWIND
- ILLUMINATION_UP
- ILLUMINATION_DOWN
- ILLUMINATION_TOGGLE
- CAPS_LOCK
- HELP
- NUM_LOCK
|
diff --git a/api/cp/cp.ui.Alert.md b/api/cp/cp.ui.Alert.md
index 4e7a6a2..ce83226 100644
--- a/api/cp/cp.ui.Alert.md
+++ b/api/cp/cp.ui.Alert.md
@@ -4,6 +4,18 @@
Alert UI Module.
## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
## API Documentation
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.ui.Alert:new(app) -> Alert` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Alert` instance. It will automatically search the parent's children for Alerts. |
+| **Parameters** | - parent - The parent object.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Button.md b/api/cp/cp.ui.Button.md
index 487c626..2aa075f 100644
--- a/api/cp/cp.ui.Button.md
+++ b/api/cp/cp.ui.Button.md
@@ -1,19 +1,65 @@
# [docs](index.md) » cp.ui.Button
---
-Button Module.
+The `Button` type extends [Element](cp.ui.Element.md) and includes all its
+methods, fields and other properties.
## API Overview
* Functions - API calls offered directly by the extension
- * [new](#new)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Button](#button)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [title](#title)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doPress](#dopress)
+ * [press](#press)
## API Documentation
### Functions
-#### [new](#new)
-| **Signature** | `cp.ui.Button:new(axuielement, table) -> Button` |
+#### [matches](#matches)
+| **Signature** | `cp.ui.Button.matches(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new Button |
+| **Type** | Function |
+| **Description** | Checks if the `element` is a `Button`, returning `true` if so. |
+| **Parameters** | - element - The
hs._asm.axuielement to check.
|
+| **Returns** | true if the element is a Button, or false if not.
|
+
+### Constructors
+
+#### [Button](#button)
+| **Signature** | `cp.ui.Button(parent, uiFinder) -> cp.ui.Button` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Button` instance. |
+| **Parameters** | - parent - The parent object. Should have a
UI and isShowing field. - uiFinder - A function which will return the
hs._asm.axuielement the button belongs to, or nil if not available.
|
+| **Returns** | The new Button instance.
|
+
+### Fields
+
+#### [title](#title)
+| **Signature** | `cp.ui.Button.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The button title, if available. |
+
+### Methods
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.Button:doPress() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will press the button when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will press the button when executed.
|
+
+#### [press](#press)
+| **Signature** | `cp.ui.Button:press() -> self, boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Performs a button press action, if the button is available. |
+| **Parameters** | |
+| **Returns** | - The
Button instance. true if the button was actually pressed successfully.
|
diff --git a/api/cp/cp.ui.Cell.md b/api/cp/cp.ui.Cell.md
new file mode 100644
index 0000000..87a7ccc
--- /dev/null
+++ b/api/cp/cp.ui.Cell.md
@@ -0,0 +1,69 @@
+# [docs](index.md) » cp.ui.Cell
+---
+
+Represents an `AXCell` `axuielement`.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [childrenUI](#childrenui)
+ * [columnIndexRange](#columnindexrange)
+ * [rowIndexRange](#rowindexrange)
+ * [selected](#selected)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [textValueIs](#textvalueis)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Cell.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `element` is an `AXCell`. |
+
+### Fields
+
+#### [childrenUI](#childrenui)
+| **Signature** | `cp.ui.Cell.childrenUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The list of `axuielement`s which are children of this `Cell`. |
+
+#### [columnIndexRange](#columnindexrange)
+| **Signature** | `cp.ui.Cell.columnIndexRange ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a table of `{len,loc}`, which indicates if the cell covers multiple columns. |
+
+#### [rowIndexRange](#rowindexrange)
+| **Signature** | `cp.ui.Cell.rowIndexRange ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns a table of `{len,loc}`, which indicates if the cell covers multiple rows. |
+
+#### [selected](#selected)
+| **Signature** | `cp.ui.Cell.selected ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the cell is currently selected. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.Cell.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The cell value, if it is a string. |
+
+### Methods
+
+#### [textValueIs](#textvalueis)
+| **Signature** | `cp.ui.Cell.textValueIs(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the cell's text value equals `value`. |
+| **Parameters** | value - The text value to compare.
|
+| **Returns** | true if the cell text value equals the provided value.
|
+
diff --git a/api/cp/cp.ui.CheckBox.md b/api/cp/cp.ui.CheckBox.md
index 67e3401..7f2d50a 100644
--- a/api/cp/cp.ui.CheckBox.md
+++ b/api/cp/cp.ui.CheckBox.md
@@ -3,17 +3,136 @@
Check Box UI Module.
+This represents an `hs._asm.axuielement` with a `AXCheckBox` role.
+It allows checking and modifying the `checked` status like so:
+
+```lua
+myButton:checked() == true -- happens to be checked already
+myButton:checked(false) == false -- update to unchecked.
+myButton.checked:toggle() == true -- toggled back to being checked.
+```
+
+You can also call instances of `CheckBox` as a function, which will return
+the `checked` status:
+
+```lua
+myButton() == true -- still true
+myButton(false) == false -- now false
+```
+
## API Overview
* Functions - API calls offered directly by the extension
- * [new](#new)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [CheckBox](#checkbox)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [checked](#checked)
+ * [title](#title)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [click](#click)
+ * [doCheck](#docheck)
+ * [doPress](#dopress)
+ * [doUncheck](#douncheck)
+ * [loadLayout](#loadlayout)
+ * [press](#press)
+ * [saveLayout](#savelayout)
+ * [toggle](#toggle)
## API Documentation
### Functions
-#### [new](#new)
-| **Signature** | `cp.ui.CheckBox:new(axuielement, function) -> CheckBox` |
+#### [matches](#matches)
+| **Signature** | `cp.ui.CheckBox.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `hs._asm.axuielement` is a CheckBox. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it's a match, or false if not.
|
+
+### Constructors
+
+#### [CheckBox](#checkbox)
+| **Signature** | `cp.ui.CheckBox(parent, uiFinder) -> cp.ui.CheckBox` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new CheckBox. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
+### Fields
+
+#### [checked](#checked)
+| **Signature** | `cp.ui.CheckBox.checked ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the checkbox is currently checked. |
+
+#### [title](#title)
+| **Signature** | `cp.ui.CheckBox.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The button title, if available. |
+
+### Methods
+
+#### [click](#click)
+| **Signature** | `cp.ui.CheckBox:click() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Performs a single mouse click on the checkbox. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doCheck](#docheck)
+| **Signature** | `cp.ui.CheckBox:doCheck() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the `CheckBox` is checked. |
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.CheckBox:doPress() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will press the button when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will press the button when executed.
|
+
+#### [doUncheck](#douncheck)
+| **Signature** | `cp.ui.CheckBox:doUncheck() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the `CheckBox` is unchecked. |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.CheckBox:loadLayout(layout) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Applies the settings in the provided layout table. |
+| **Parameters** | - layout - The table containing layout settings. Usually created by the
saveLayout method.
|
+| **Returns** | |
+
+#### [press](#press)
+| **Signature** | `cp.ui.CheckBox:press() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to press the button. May fail if the `UI` is not available. |
+| **Parameters** | |
+| **Returns** | The CheckBox instance.
|
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.CheckBox:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table containing the layout settings for the checkbox. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [toggle](#toggle)
+| **Signature** | `cp.ui.CheckBox:toggle() -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new CheckBox |
+| **Type** | Method |
+| **Description** | Toggles the `checked` status of the button. |
+| **Parameters** | |
+| **Returns** | |
diff --git a/api/cp/cp.ui.ColorWell.md b/api/cp/cp.ui.ColorWell.md
new file mode 100644
index 0000000..e937760
--- /dev/null
+++ b/api/cp/cp.ui.ColorWell.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.ui.ColorWell
+---
+
+UI ColorWell.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ColorWell](#colorwell)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.ColorWell.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [ColorWell](#colorwell)
+| **Signature** | `cp.ui.ColorWell(parent, uiFinder) -> Image` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ColorWell` instance. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Column.md b/api/cp/cp.ui.Column.md
new file mode 100644
index 0000000..30b1a5e
--- /dev/null
+++ b/api/cp/cp.ui.Column.md
@@ -0,0 +1,57 @@
+# [docs](index.md) » cp.ui.Column
+---
+
+Represents an `AXColumn` `axuielement`.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [index](#index)
+ * [selected](#selected)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [rows](#rows)
+ * [visibleRows](#visiblerows)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Column.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `axuielement` is a `Column`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if the element is a Column.
|
+
+### Fields
+
+#### [index](#index)
+| **Signature** | `cp.ui.Column.index ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The numeric index of this column in the overall container, with `0` being the first item. |
+
+#### [selected](#selected)
+| **Signature** | `cp.ui.Column.selected ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the column is currently selected. May be set. |
+
+### Methods
+
+#### [rows](#rows)
+| **Signature** | `cp.ui.Column:rows() -> table of cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` of [Row](cp.ui.Row.md)s contained in the Column. |
+| **Returns** | - The
table, or nil if the column's UI is not available.
|
+
+#### [visibleRows](#visiblerows)
+| **Signature** | `cp.ui.Column:visibleRows() -> table of cp.ui.Rows or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` of [Row](cp.ui.Row.md)s which are currently visible on screen. |
+| **Returns** | - The
table, or nil if the column's UI is not available.
|
+
diff --git a/api/cp/cp.ui.ComboBox.md b/api/cp/cp.ui.ComboBox.md
new file mode 100644
index 0000000..a3277df
--- /dev/null
+++ b/api/cp/cp.ui.ComboBox.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.ui.ComboBox
+---
+
+Combo Box Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [ComboBox](#combobox)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.ComboBox.matches(element[, subrole]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check. - subrole - (optional) If provided, the field must have the specified subrole.
|
+| **Returns** | true if matches otherwise false
|
+
+### Methods
+
+#### [ComboBox](#combobox)
+| **Signature** | `cp.ui.ComboBox(parent, uiFinder, listAdaptorFn, [, getConvertFn[, setConvertFn]]) -> ComboBox` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new ComboBox. They have a parent and a finder function. |
+| **Parameters** | - parent - The parent object.
- uiFinder - The function will return the
axuielement for the ComboBox. - listAdaptorFn - A function that will recieve a
List and AXUIElement value and return an Element - getConvertFn - (optional) If provided, will be passed the
string value when returning. - setConvertFn - (optional) If provided, will be passed the
number value when setting.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Dialog.md b/api/cp/cp.ui.Dialog.md
new file mode 100644
index 0000000..a4b420e
--- /dev/null
+++ b/api/cp/cp.ui.Dialog.md
@@ -0,0 +1,9 @@
+# [docs](index.md) » cp.ui.Dialog
+---
+
+Represents a [Window](cp.ui.Window.md) which has a `AXSubrole` of `AXDialog`.
+
+## API Overview
+
+## API Documentation
+
diff --git a/api/cp/cp.ui.DisclosureTriangle.md b/api/cp/cp.ui.DisclosureTriangle.md
new file mode 100644
index 0000000..9652ac4
--- /dev/null
+++ b/api/cp/cp.ui.DisclosureTriangle.md
@@ -0,0 +1,138 @@
+# [docs](index.md) » cp.ui.DisclosureTriangle
+---
+
+Disclosure Triangle UI Module.
+
+This represents an `hs._asm.axuielement` with a `AXDisclosureTriangle` role.
+It allows checking and modifying the `opened` status like so:
+
+```lua
+myButton:opened() == true -- happens to be opened already
+myButton:opened(false) == false -- update to unopened.
+myButton.opened:toggle() == true -- toggled back to being opened.
+```
+
+You can also call instances of `DisclosureTriangle` as a function, which will return
+the `opened` status:
+
+```lua
+myButton() == true -- still true
+myButton(false) == false -- now false
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [DisclosureTriangle](#disclosuretriangle)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [opened](#opened)
+ * [title](#title)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [click](#click)
+ * [doClose](#doclose)
+ * [doOpen](#doopen)
+ * [doPress](#dopress)
+ * [loadLayout](#loadlayout)
+ * [press](#press)
+ * [saveLayout](#savelayout)
+ * [toggle](#toggle)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.DisclosureTriangle.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `hs._asm.axuielement` is a DisclosureTriangle. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it's a match, or false if not.
|
+
+### Constructors
+
+#### [DisclosureTriangle](#disclosuretriangle)
+| **Signature** | `cp.ui.DisclosureTriangle(parent, uiFinder) -> cp.ui.DisclosureTriangle` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new DisclosureTriangle. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | - The new
DisclosureTriangle.
|
+
+### Fields
+
+#### [opened](#opened)
+| **Signature** | `cp.ui.DisclosureTriangle.opened ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the disclosure triangle is currently opened. |
+
+#### [title](#title)
+| **Signature** | `cp.ui.DisclosureTriangle.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The button title, if available. |
+
+### Methods
+
+#### [click](#click)
+| **Signature** | `cp.ui.DisclosureTriangle:click() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Performs a single mouse click on the triangle. |
+| **Parameters** | |
+| **Returns** | - The
DisclosureTriangle instance.
|
+
+#### [doClose](#doclose)
+| **Signature** | `cp.ui.DisclosureTriangle:doClose() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the `DisclosureTriangle` is unopened. |
+
+#### [doOpen](#doopen)
+| **Signature** | `cp.ui.DisclosureTriangle:doOpen() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the `DisclosureTriangle` is opened. |
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.DisclosureTriangle:doPress() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will press the button when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will press the button when executed.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.DisclosureTriangle:loadLayout(layout) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Applies the settings in the provided layout table. |
+| **Parameters** | - layout - The table containing layout settings. Usually created by the
saveLayout method.
|
+| **Returns** | |
+
+#### [press](#press)
+| **Signature** | `cp.ui.DisclosureTriangle:press() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to press the button. May fail if the `UI` is not available. |
+| **Parameters** | |
+| **Returns** | The DisclosureTriangle instance.
|
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.DisclosureTriangle:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table containing the layout settings. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [toggle](#toggle)
+| **Signature** | `cp.ui.DisclosureTriangle:toggle() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Toggles the `opened` status of the button. |
+| **Parameters** | |
+| **Returns** | - The
DisclosureTriangle instance.
|
+
diff --git a/api/cp/cp.ui.Element.md b/api/cp/cp.ui.Element.md
new file mode 100644
index 0000000..0074ab2
--- /dev/null
+++ b/api/cp/cp.ui.Element.md
@@ -0,0 +1,208 @@
+# [docs](index.md) » cp.ui.Element
+---
+
+A support class for `hs._asm.axuielement` management.
+
+See:
+* [Button](cp.ui.Button.md)
+* [CheckBox](cp.rx.CheckBox.md)
+* [MenuButton](cp.rx.MenuButton.md)
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Element](#element)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [frame](#frame)
+ * [identifier](#identifier)
+ * [isEnabled](#isenabled)
+ * [isShowing](#isshowing)
+ * [position](#position)
+ * [role](#role)
+ * [size](#size)
+ * [subrole](#subrole)
+ * [textValue](#textvalue)
+ * [title](#title)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [doLayout](#dolayout)
+ * [doShow](#doshow)
+ * [focus](#focus)
+ * [loadLayout](#loadlayout)
+ * [parent](#parent)
+ * [saveLayout](#savelayout)
+ * [show](#show)
+ * [snapshot](#snapshot)
+ * [valueIs](#valueis)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Element.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Matches to any valid `hs._asm.axuielement`. Sub-types should provide their own `matches` method. |
+| **Parameters** | |
+| **Returns** | true if the element is a valid instance of an hs._asm.axuielement.
|
+
+### Constructors
+
+#### [Element](#element)
+| **Signature** | `cp.ui.Element(parent, uiFinder) -> cp.ui.Element` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Element` with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - The parent Element (may be
nil) - uiFinder - The
function or prop that actually provides the current axuielement instance.
|
+| **Returns** | - The new
Element instance.
|
+
+### Fields
+
+#### [frame](#frame)
+| **Signature** | `cp.ui.Element.frame ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the table containing the `x`, `y`, `w`, and `h` values for the `Element` frame, or `nil` if not available. |
+
+#### [identifier](#identifier)
+| **Signature** | `cp.ui.Element.identifier ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `AX` identifier for the element. |
+
+#### [isEnabled](#isenabled)
+| **Signature** | `cp.ui.Element.isEnabled ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if the `Element` is visible and enabled. |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.ui.Element.isShowing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | If `true`, the `Element` is showing on screen. |
+
+#### [position](#position)
+| **Signature** | `cp.ui.Element.position ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the table containing the `x` and `y` values for the `Element` frame, or `nil` if not available. |
+
+#### [role](#role)
+| **Signature** | `cp.ui.Element.role ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `AX` role name for the element. |
+
+#### [size](#size)
+| **Signature** | `cp.ui.Element.size ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the table containing the `w` and `h` values for the `Element` frame, or `nil` if not available. |
+
+#### [subrole](#subrole)
+| **Signature** | `cp.ui.Element.subrole ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `AX` subrole name for the element. |
+
+#### [textValue](#textvalue)
+| **Signature** | `cp.ui.Element.textValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The 'AXValue' of the element, if it is a `string`. |
+
+#### [title](#title)
+| **Signature** | `cp.ui.Element.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The 'AXTitle' of the element. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.Element.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The 'AXValue' of the element. |
+
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.ui.Element:app() -> App` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the app instance. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.ui.Element:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) which will attempt to load the layout based on the parameters |
+| **Parameters** | - layout - a
table of parameters that will be used to layout the element.
|
+| **Returns** | |
+| **Notes** | - By default, to enable backwards-compatibility, this method will simply call the [#loadLayout]. Override it to provide more optimal asynchonous behaviour if required.
- When subclassing, the overriding
doLayout method should call the parent class's doLayout method,then process any custom values from it, like so: lua function MyElement:doLayout(layout) layout = layout or {} return Do(Element.doLayout(self, layout)) :Then(function() self.myConfig = layout.myConfig end) :Label("MyElement:doLayout") end
|
+
+#### [doShow](#doshow)
+| **Signature** | `cp.ui.Element:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will ensure the Element is showing. |
+
+#### [focus](#focus)
+| **Signature** | `cp.ui.Element:focus() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Set the focus on an element. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.Element:loadLayout(layout) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | When called, the Element (or subclass) will attempt to load the layout based on the parameters |
+| **Parameters** | - layout - a
table of parameters that will be used to layout the element.
|
+| **Notes** | - When subclassing, the overriding
loadLayout method should call the parent's loadLayout method,then process any custom values from it, like so: function MyElement:loadLayout(layout) Element.loadLayout(self, layout) self.myConfig = layout.myConfig end
|
+
+#### [parent](#parent)
+| **Signature** | `cp.ui.Element:parent() -> parent` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the parent object. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.Element:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` containing the current configuration details for this Element (or subclass). |
+| **Notes** | - When subclassing, the overriding
saveLayout method should call the parent's saveLayout method,then add values to it, like so: function MyElement:saveLayout() local layout = Element.saveLayout(self) layout.myConfig = self.myConfig return layout end
|
+
+#### [show](#show)
+| **Signature** | `cp.ui.Element:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the Element. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [snapshot](#snapshot)
+| **Signature** | `cp.ui.Element:snapshot([path]) -> hs.image | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Takes a snapshot of the button in its current state as a PNG and returns it. |
+| **Parameters** | - path - (optional) The path to save the file. Should include the extension (should be
.png).
|
+
+#### [valueIs](#valueis)
+| **Signature** | `cp.ui.Element.valueIs(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the current value of this element is the provided value. |
+| **Parameters** | - value - The value to compare to.
|
+| **Returns** | true if the current [#value] is equal to the provided value.
|
+
diff --git a/api/cp/cp.ui.ElementCache.md b/api/cp/cp.ui.ElementCache.md
new file mode 100644
index 0000000..c8cf908
--- /dev/null
+++ b/api/cp/cp.ui.ElementCache.md
@@ -0,0 +1,79 @@
+# [docs](index.md) » cp.ui.ElementCache
+---
+
+Provides caching for [Element](cp.ui.Element.md) subclasses that want to cache children.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ElementCache](#elementcache)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [cachedElement](#cachedelement)
+ * [cacheElement](#cacheelement)
+ * [clean](#clean)
+ * [fetchElement](#fetchelement)
+ * [fetchElements](#fetchelements)
+ * [reset](#reset)
+
+## API Documentation
+
+### Constructors
+
+#### [ElementCache](#elementcache)
+| **Signature** | `cp.ui.ElementCache(parent[, createFn])` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates and returns a new `ElementCache`, with the specified parent and function which |
+| **Parameters** | - parent - the parent Element that contains the cached items.
- createFn - a function that will create new
Element subclasses based on cached axuielement values.
|
+| **Returns** | |
+
+### Methods
+
+#### [cachedElement](#cachedelement)
+| **Signature** | `cp.ui.ElementCache:cachedElement(cache, ui) -> cp.ui.Element or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the cached [Element](cp.ui.Element.md), if it is present. |
+| **Parameters** | - ui - The
axuielement it is linked to. If not provided, it will be fetched by calling Element:UI().
|
+| **Returns** | |
+
+#### [cacheElement](#cacheelement)
+| **Signature** | `cp.ui.ElementCache:cacheElement(element[, ui]) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Caches the provided [Element](cp.ui.Element.md). |
+| **Parameters** | - element - The Element
- ui - The
axuielement it is linked to. If not provided, it will be fetched by calling Element:UI().
|
+| **Returns** | |
+
+#### [clean](#clean)
+| **Signature** | `cp.ui.ElementCache:clean()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Clears the cache of any invalid (aka dead) items. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [fetchElement](#fetchelement)
+| **Signature** | `cp.ui.ElementCache:fetchElement(ui) -> cp.ui.Element or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Retrieves the matching [Element](cp.ui.Element.md) instance from the cache. |
+| **Parameters** | - ui - The
axuielement being fetched for.
|
+| **Returns** | |
+
+#### [fetchElements](#fetchelements)
+| **Signature** | `cp.ui.ElementCache:fetchElements(uis) -> table of cp.ui.Elements or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Fetches a list of [Element](cp.ui.Element.md) instances linked to the provided `axuielement` list. |
+| **Parameters** | - uis - A
table of axuielement values.
|
+| **Returns** | |
+| **Notes** | - If any of the provided
axuielement values are either not from the parent, or no longer valid, a nil value will be stored in the matching index. Note that in that case, this will break useage of ipairs due to leaving holes in the list.
|
+
+#### [reset](#reset)
+| **Signature** | `cp.ui.ElementCache:reset() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Removes all cached items from the cache. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Grid.md b/api/cp/cp.ui.Grid.md
new file mode 100644
index 0000000..257bae2
--- /dev/null
+++ b/api/cp/cp.ui.Grid.md
@@ -0,0 +1,221 @@
+# [docs](index.md) » cp.ui.Grid
+---
+
+Abstract base class for `AX` elements which form a grid, such as [Table2](cp.ui.Table2.md) and [Outline](cp.ui.Outline.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Grid](#grid)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [selectedRows](#selectedrows)
+ * [selectedRowsUI](#selectedrowsui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [childrenUI](#childrenui)
+ * [column](#column)
+ * [columns](#columns)
+ * [columnsUI](#columnsui)
+ * [createColumn](#createcolumn)
+ * [createRow](#createrow)
+ * [doSelectRow](#doselectrow)
+ * [fetchColumn](#fetchcolumn)
+ * [fetchRow](#fetchrow)
+ * [fetchRows](#fetchrows)
+ * [filterRows](#filterrows)
+ * [findCell](#findcell)
+ * [findColumnIndex](#findcolumnindex)
+ * [findRow](#findrow)
+ * [row](#row)
+ * [rows](#rows)
+ * [rowsUI](#rowsui)
+ * [selectRow](#selectrow)
+ * [visitRow](#visitrow)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.ui.Grid.is(thing) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Grid`. |
+| **Parameters** | thing - The thing to check
|
+| **Returns** | true if the thing is a Table instance.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Grid.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `element` is an `Grid`. |
+
+### Constructors
+
+#### [Grid](#grid)
+| **Signature** | `cp.ui.Grid(parent, uiFinder) -> cp.ui.Grid` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Grid` with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - The parent instance.
- uiFinder - A
function or a cp.prop which will return the axuielement.
|
+| **Returns** | |
+
+### Fields
+
+#### [selectedRows](#selectedrows)
+| **Signature** | `cp.ui.Grid.selectedRows ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Contains the list of currently-selected [Row](cp.ui.Row.md)s. Can be set. |
+
+#### [selectedRowsUI](#selectedrowsui)
+| **Signature** | `cp.ui.Grid.selectedRowsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Contains the list of currently-selected row `axuilements`. Can be set. |
+| **Notes** | |
+
+### Methods
+
+#### [childrenUI](#childrenui)
+| **Signature** | `cp.ui.Grid:childrenUI() -> table of axuielements` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` containing the `axuielement`s which are children of the outline. |
+
+#### [column](#column)
+| **Signature** | `cp.ui.Grid:column(index) -> cp.ui.Column or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides the [Column](cp.ui.Column.md) at the specified index, or `nil` if it's not available. |
+
+#### [columns](#columns)
+| **Signature** | `cp.ui.Grid:columns() -> table of cp.ui.Columns` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of [Column](cp.ui.Column.md)s. |
+
+#### [columnsUI](#columnsui)
+| **Signature** | `cp.ui.Grid:columnsUI() -> table of axuielements` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` containing the `axuielement`s which are columns of the outline. |
+
+#### [createColumn](#createcolumn)
+| **Signature** | `cp.ui.Grid:createColumn(columnUI) -> cp.ui.Column` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to create a new [Column](cp.ui.Column.md) with the provided `columnUI` `axuielement`. |
+| **Parameters** | - columnUI - the
AXColumn axuielement to create a Column for.
|
+| **Returns** | - The Column or an error if a problem occurred.
|
+| **Notes** | - Subclasses which want to provide a custom Column implementation should override this method.
|
+
+#### [createRow](#createrow)
+| **Signature** | `cp.ui.Grid:createRow(rowUI) -> cp.ui.Row` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to create a new [Row](cp.ui.Row.md) with the provided `rowUI` `axuielement`. |
+| **Parameters** | - rowUI - the
AXRow axuielement to create a Row for.
|
+| **Returns** | - The Row or an error if a problem occurred.
|
+| **Notes** | - Subclasses which want to provide a custom Row implementation should override this method.
|
+
+#### [doSelectRow](#doselectrow)
+| **Signature** | `cp.ui.Grid:doSelectRow(path) -> [Statement](cp.rx.go.Statement.md)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects the row at the sub-level named in the `path` table. |
+| **Parameters** | - path - A
table of names to navigate through to find the Row to select.
|
+| **Returns** | - The selected Row, or
nil if not found.
|
+
+#### [fetchColumn](#fetchcolumn)
+| **Signature** | `cp.ui.Grid:fetchColumn(columnsUI) -> table of cp.ui.Columns` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` of the same length as `columnsUI`. |
+| **Parameters** | - columnsUI - The list of
AXColumn axuielements to find.
|
+| **Returns** | - A
table with the same number of elements, containing the matching Column instances.
|
+
+#### [fetchRow](#fetchrow)
+| **Signature** | `cp.ui.Grid:fetchRow(rowUI) -> cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the [Row](cp.ui.Row.md) that represents the provided `rowUI`, if it is actually present. |
+| **Parameters** | - rowUI - The
axuielement for the AXRow to find a Row for.
|
+| **Returns** | - The Row, or
nil if the rowUI is not available.
|
+
+#### [fetchRows](#fetchrows)
+| **Signature** | `cp.ui.Grid:fetchRows(rowsUI) -> table of cp.ui.Rows` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` of the same length as `rowsUI`. |
+| **Parameters** | - rowsUI - The list of
AXRow axuielements to find.
|
+| **Returns** | - A
table with the same number of elements, containing the matching Row instances.
|
+
+#### [filterRows](#filterrows)
+| **Signature** | `cp.ui.Grid:filterRows(matcherFn) -> table of cp.ui.Rows or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table only containing [Row](cp.ui.Row.md)s which pass the predicate `matcherFn`. |
+| **Parameters** | - matcherFn - the
function that will accept a Row and return a boolean.
|
+| **Returns** | - A
table of Rows, or nil if no UI is currently available.
|
+
+#### [findCell](#findcell)
+| **Signature** | `cp.ui.Grid:findCell(rowNumber, columnId) -> `hs._asm.axuielement` | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds a specific [Cell](cp.ui.Cell.md). |
+| **Parameters** | - rowNumber - The row number.
- columnId - The Column ID.
|
+| **Returns** | - A
hs._asm.axuielement object for the cell, or nil if the cell cannot be found.
|
+
+#### [findColumnIndex](#findcolumnindex)
+| **Signature** | `cp.ui.Grid:findColumnIndex(id) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the Column Index based on an `AXIdentifier` ID. |
+| **Parameters** | - id - The
AXIdentifier of the column index you want to find.
|
+| **Returns** | - A column index as a number, or
nil if no index can be found.
|
+
+#### [findRow](#findrow)
+| **Signature** | `cp.ui.Grid:findRow(matcherFn) -> cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Row](cp.ui.Row.md) that has a result of `true` when passed to the `matcherFn` predicate, |
+| **Parameters** | - matcherFn - The function to check the Row with.
|
+| **Returns** | |
+
+#### [row](#row)
+| **Signature** | `cp.ui.Grid:row(index) -> cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides the [Row](cp.ui.Row.md) at the specified index, or `nil` if it's not available. |
+
+#### [rows](#rows)
+| **Signature** | `cp.ui.Grid:rows() -> table of cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` with the list of `cp.ui.Row` elements for the rows. |
+| **Returns** | - A table containing the list of Rows, or
nil if not presently available.
|
+
+#### [rowsUI](#rowsui)
+| **Signature** | `cp.ui.Grid:rowsUI() -> table of axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` containing the `axuielement`s which are rows in the outline. |
+
+#### [selectRow](#selectrow)
+| **Signature** | `cp.ui.Grid:selectRow(path) -> cp.ui.Row` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects the row at the sub-level named in the `path` table. |
+| **Parameters** | - path - A
table of names to navigate through to find the Row to select.
|
+| **Returns** | - The selected Row, or
nil if not found.
|
+
+#### [visitRow](#visitrow)
+| **Signature** | `cp.ui.Grid:visitRow(path, actionFn) -> cp.ui.Row` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Visits the row at the sub-level named in the `names` table, and executes the `actionFn`. |
+| **Parameters** | names - The array of names to navigate downactionFn - A function to execute when the target row is found.
|
+| **Returns** | - The row that was visited, or
nil if not.
|
+
diff --git a/api/cp/cp.ui.Group.md b/api/cp/cp.ui.Group.md
new file mode 100644
index 0000000..2f397dc
--- /dev/null
+++ b/api/cp/cp.ui.Group.md
@@ -0,0 +1,42 @@
+# [docs](index.md) » cp.ui.Group
+---
+
+UI Group.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [contents](#contents)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Group](#group)
+
+## API Documentation
+
+### Functions
+
+#### [contents](#contents)
+| **Signature** | `cp.ui.Group.contents(element) -> axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the `AXContents` of the element, if it is an `AXGroup`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | - The list of
axuielements for the AXContents of the AXGroup, or nil.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Group.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Group](#group)
+| **Signature** | `cp.ui.Group(parent, uiFinder[, contentsClass]) -> Alert` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Group` instance. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Image.md b/api/cp/cp.ui.Image.md
new file mode 100644
index 0000000..04d5273
--- /dev/null
+++ b/api/cp/cp.ui.Image.md
@@ -0,0 +1,23 @@
+# [docs](index.md) » cp.ui.Image
+---
+
+Represents an `AXImage` `axuielement` value.
+
+Extends [Element](cp.ui.Element.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Image.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `axuielement` is an `AXImage`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it is an AXImage, otherwise false.
|
+
diff --git a/api/cp/cp.ui.List.md b/api/cp/cp.ui.List.md
new file mode 100644
index 0000000..6bf151b
--- /dev/null
+++ b/api/cp/cp.ui.List.md
@@ -0,0 +1,45 @@
+# [docs](index.md) » cp.ui.List
+---
+
+Represents an `AXList` `axuielement` value.
+
+Extends [Element](cp.ui.Element.md).
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [List](#list)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [items](#items)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.List.matches(element)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `axuielement` is an `AXList`. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it is an AXList, otherwise false.
|
+
+### Constructors
+
+#### [List](#list)
+| **Signature** | `cp.ui.List(parent, uiFinder, itemAdaptorFn)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new List. |
+| **Parameters** | - parent - The parent table. Should have a
isShowing property. - uiFinder - The
function or cp.prop that provides the current hs._asm.axuielement.
|
+| **Returns** | |
+
+### Methods
+
+#### [items](#items)
+| **Signature** | `cp.ui.List:items() -> table of values` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the children as items, as adapted by the `itemAdaptor` in the constructor |
+
diff --git a/api/cp/cp.ui.Menu.md b/api/cp/cp.ui.Menu.md
new file mode 100644
index 0000000..6686495
--- /dev/null
+++ b/api/cp/cp.ui.Menu.md
@@ -0,0 +1,63 @@
+# [docs](index.md) » cp.ui.Menu
+---
+
+UI for AXMenus.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Menu](#menu)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [cancel](#cancel)
+ * [doSelectItem](#doselectitem)
+ * [doSelectValue](#doselectvalue)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Menu.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Menu](#menu)
+| **Signature** | `cp.ui.Menu(parent, uiFinder) -> Menu` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Menu` instance. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
+### Methods
+
+#### [cancel](#cancel)
+| **Signature** | `cp.ui.Menu:cancel() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Closes a menu. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doSelectItem](#doselectitem)
+| **Signature** | `cp.ui.Menu:doSelectItem(index) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `MenuButton` by index. |
+| **Parameters** | - index - The index number of the item to match.
|
+| **Returns** | |
+
+#### [doSelectValue](#doselectvalue)
+| **Signature** | `cp.ui.Menu:doSelectValue(pattern[, altPattern]) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `Menu` by value. |
+| **Parameters** | - pattern - The pattern to match.
- [altPattern] - An optional alternate pattern to match if the first pattern fails.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.MenuButton.md b/api/cp/cp.ui.MenuButton.md
new file mode 100644
index 0000000..61ab48b
--- /dev/null
+++ b/api/cp/cp.ui.MenuButton.md
@@ -0,0 +1,185 @@
+# [docs](index.md) » cp.ui.MenuButton
+---
+
+Menu Button Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [MenuButton](#menubutton)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [menuUI](#menuui)
+ * [title](#title)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doPress](#dopress)
+ * [doSelectItem](#doselectitem)
+ * [doSelectItemMatching](#doselectitemmatching)
+ * [doSelectValue](#doselectvalue)
+ * [doShowMenu](#doshowmenu)
+ * [getTitle](#gettitle)
+ * [getValue](#getvalue)
+ * [loadLayout](#loadlayout)
+ * [press](#press)
+ * [saveLayout](#savelayout)
+ * [selectItem](#selectitem)
+ * [selectItemMatching](#selectitemmatching)
+ * [setValue](#setvalue)
+ * [show](#show)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.MenuButton.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [MenuButton](#menubutton)
+| **Signature** | `cp.ui.MenuButton(parent, uiFinder) -> MenuButton` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new MenuButton. |
+| **Parameters** | - parent - The parent object. Should have an
isShowing property. - uiFinder - A
cp.prop or function which will return a hs._asm.axuielement, or nil if it's not available.
|
+
+### Fields
+
+#### [menuUI](#menuui)
+| **Signature** | `cp.ui.MenuButton.menuUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `AXMenu` for the MenuButton if it is currently visible. |
+
+#### [title](#title)
+| **Signature** | `cp.ui.MenuButton.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the title for the MenuButton. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.MenuButton.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns or sets the current MenuButton value. |
+
+### Methods
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.MenuButton:doPress() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that presses the `MenuButton`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doSelectItem](#doselectitem)
+| **Signature** | `cp.ui.MenuButton:doSelectItem(index) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `MenuButton` by index. |
+| **Parameters** | - index - The index number of the item to match.
|
+| **Returns** | |
+
+#### [doSelectItemMatching](#doselectitemmatching)
+| **Signature** | `cp.ui.MenuButton:doSelectItemMatching(pattern[, altPattern]) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `MenuButton` by pattern. |
+| **Parameters** | - pattern - The pattern to match.
- [altPattern] - An optional alternate pattern to match if the first pattern fails.
|
+| **Returns** | |
+
+#### [doSelectValue](#doselectvalue)
+| **Signature** | `cp.ui.MenuButton:doSelectValue(value) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `MenuButton` by value. |
+| **Parameters** | - value - The value of the item to match.
|
+| **Returns** | |
+
+#### [doShowMenu](#doshowmenu)
+| **Signature** | `cp.ui.MenuButton:doShowMenu() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that presses the `MenuButton` if the menu is not showing. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getTitle](#gettitle)
+| **Signature** | `cp.ui.MenuButton:getTitle() -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the `MenuButton` title. |
+| **Parameters** | |
+| **Returns** | - The
MenuButton title as string, or nil if the title cannot be determined.
|
+
+#### [getValue](#getvalue)
+| **Signature** | `cp.ui.MenuButton:getValue() -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the `MenuButton` value. |
+| **Parameters** | |
+| **Returns** | - The
MenuButton value as string, or nil if the value cannot be determined.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.MenuButton:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a `MenuButton` layout. |
+| **Parameters** | - layout - A table containing the
MenuButton layout settings - created using saveLayout.
|
+| **Returns** | |
+
+#### [press](#press)
+| **Signature** | `cp.ui.MenuButton:press() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the MenuButton. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.MenuButton:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current `MenuButton` layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current
MenuButton Layout.
|
+
+#### [selectItem](#selectitem)
+| **Signature** | `cp.ui.MenuButton:selectItem(index) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select an item on the `MenuButton` by index. |
+| **Parameters** | - index - The index of the item you want to select.
|
+| **Returns** | true if successfully selected, otherwise false.
|
+
+#### [selectItemMatching](#selectitemmatching)
+| **Signature** | `cp.ui.MenuButton:selectItemMatching(pattern) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select an item on the `MenuButton` by pattern. |
+| **Parameters** | - pattern - A pattern used to select the
MenuButton item.
|
+| **Returns** | true if successfully selected, otherwise false.
|
+
+#### [setValue](#setvalue)
+| **Signature** | `cp.ui.MenuButton:setValue(value) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the `MenuButton` value. |
+| **Parameters** | - value - The value you want to set the
MenuButton to.
|
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.ui.MenuButton:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's the MenuButton. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Outline.md b/api/cp/cp.ui.Outline.md
new file mode 100644
index 0000000..cb58804
--- /dev/null
+++ b/api/cp/cp.ui.Outline.md
@@ -0,0 +1,126 @@
+# [docs](index.md) » cp.ui.Outline
+---
+
+Represents an `AXOutline` `axuielement`.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Outline](#outline)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [childrenUI](#childrenui)
+ * [columns](#columns)
+ * [columnsUI](#columnsui)
+ * [createColumn](#createcolumn)
+ * [createRow](#createrow)
+ * [fetchColumn](#fetchcolumn)
+ * [fetchRow](#fetchrow)
+ * [fetchRows](#fetchrows)
+ * [filterRows](#filterrows)
+ * [rows](#rows)
+ * [rowsUI](#rowsui)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Outline.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `element` is an `Outline`. |
+
+### Constructors
+
+#### [Outline](#outline)
+| **Signature** | `cp.ui.Outline(parent, uiFinder) -> cp.ui.Outline` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Outline` with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - The parent instance.
- uiFinder - A
function or a cp.prop which will return the AXOutline axuielement.
|
+| **Returns** | - The new
Outline instance.
|
+
+### Methods
+
+#### [childrenUI](#childrenui)
+| **Signature** | `cp.ui.Outline:childrenUI() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` containing the `axuielement`s which are children of the outline. |
+
+#### [columns](#columns)
+| **Signature** | `cp.ui.Outline:columns() -> table of cp.ui.Columns` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the list of [Column](cp.ui.Column.md)s in this `Outline`. |
+
+#### [columnsUI](#columnsui)
+| **Signature** | `cp.ui.Outline:columnsUI() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` containing the `axuielement`s which are columns of the outline. |
+
+#### [createColumn](#createcolumn)
+| **Signature** | `cp.ui.Outline:createColumn(columnUI) -> cp.ui.Column` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to create a new [Column](cp.ui.Column.md) with the provided `columnUI` `axuielement`. |
+| **Parameters** | - columnUI - the
AXColumn axuielement to create a Column for.
|
+| **Returns** | - The Column or an error if a problem occurred.
|
+| **Notes** | - Subclasses which want to provide a custom Column implementation should override this method.
|
+
+#### [createRow](#createrow)
+| **Signature** | `cp.ui.Outline:createRow(rowUI) -> cp.ui.Row` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to create a new [Row](cp.ui.Row.md) with the provided `rowUI` `axuielement`. |
+| **Parameters** | - rowUI - the
AXRow axuielement to create a Row for.
|
+| **Returns** | - The Row or an error if a problem occurred.
|
+| **Notes** | - Subclasses which want to provide a custom Row implementation should override this method.
|
+
+#### [fetchColumn](#fetchcolumn)
+| **Signature** | `cp.ui.Outline:fetchColumn(columnsUI) -> table of cp.ui.Columns` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` of the same length as `columnsUI`. |
+| **Parameters** | - columnsUI - The list of
AXColumn axuielements to find.
|
+| **Returns** | - A
table with the same number of elements, containing the matching Column instances.
|
+
+#### [fetchRow](#fetchrow)
+| **Signature** | `cp.ui.Outline:fetchRow(rowUI) -> cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the [Row](cp.ui.Row.md) that represents the provided `rowUI`, if it is actually present |
+| **Parameters** | - rowUI - The
axuielement for the AXRow to find a Row for.
|
+| **Returns** | - The Row, or
nil if the rowUI is not in this Outline.
|
+
+#### [fetchRows](#fetchrows)
+| **Signature** | `cp.ui.Outline:fetchRows(rowsUI) -> table of cp.ui.Rows` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` of the same length as `rowsUI`. |
+| **Parameters** | - rowsUI - The list of
AXRow axuielements to find.
|
+| **Returns** | - A
table with the same number of elements, containing the matching Row instances.
|
+
+#### [filterRows](#filterrows)
+| **Signature** | `cp.ui.Outline:filterRows(matcherFn) -> table of cp.ui.Rows or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a table only containing [Row](cp.ui.Row.md)s which pass the predicate `matcherFn`. |
+| **Parameters** | - matcherFn - the
function that will accept a Row and return a boolean.
|
+| **Returns** | - A
table of Rows, or nil if no UI is currently available.
|
+
+#### [rows](#rows)
+| **Signature** | `cp.ui.Outline:rows() -> table of cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` with the list of `cp.ui.Row` elements for the rows. |
+| **Returns** | - A table containing the list of Rows in the
Outline, or nil if the Outline is not presently available.
|
+
+#### [rowsUI](#rowsui)
+| **Signature** | `cp.ui.Outline:rowsUI() -> table of axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Provides a `table` containing the `axuielement`s which are rows in the outline. |
+
diff --git a/api/cp/cp.ui.PopUpButton.md b/api/cp/cp.ui.PopUpButton.md
index 56e4538..efbf897 100644
--- a/api/cp/cp.ui.PopUpButton.md
+++ b/api/cp/cp.ui.PopUpButton.md
@@ -5,15 +5,130 @@ Pop Up Button Module.
## API Overview
* Functions - API calls offered directly by the extension
- * [new](#new)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [PopUpButton](#popupbutton)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [menuUI](#menuui)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doPress](#dopress)
+ * [doSelectItem](#doselectitem)
+ * [doSelectValue](#doselectvalue)
+ * [getValue](#getvalue)
+ * [loadLayout](#loadlayout)
+ * [press](#press)
+ * [saveLayout](#savelayout)
+ * [selectItem](#selectitem)
+ * [setValue](#setvalue)
## API Documentation
### Functions
-#### [new](#new)
-| **Signature** | `cp.ui.PopUpButton:new(axuielement, function) -> PopUpButton` |
+#### [matches](#matches)
+| **Signature** | `cp.ui.PopUpButton.matches(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new PopUpButton |
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [PopUpButton](#popupbutton)
+| **Signature** | `cp.ui.PopUpButton(parent, uiFinder) -> cp.ui.PopUpButton` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new PopUpButton. |
+| **Parameters** | - parent - The parent table. Should have a
isShowing property. - uiFinder - The
function or cp.prop that provides the current hs._asm.axuielement.
|
+| **Returns** | - The new
PopUpButton instance.
|
+
+### Fields
+
+#### [menuUI](#menuui)
+| **Signature** | `cp.ui.PopUpButton.menuUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `AXMenu` for the PopUpMenu if it is currently visible. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.PopUpButton.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns or sets the current `PopUpButton` value. |
+
+### Methods
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.PopUpButton:doPress() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that presses the `PopUpButton`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doSelectItem](#doselectitem)
+| **Signature** | `cp.ui.PopUpButton:doSelectItem(index) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `PopUpButton` by index. |
+| **Parameters** | - index - The index number of the item you want to select.
|
+| **Returns** | |
+
+#### [doSelectValue](#doselectvalue)
+| **Signature** | `cp.ui.PopUpButton:doSelectValue(value) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will select an item on the `PopUpButton` by value. |
+| **Parameters** | - value - The value of the item to match.
|
+| **Returns** | |
+
+#### [getValue](#getvalue)
+| **Signature** | `cp.ui.PopUpButton:getValue() -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the `PopUpButton` value. |
+| **Parameters** | |
+| **Returns** | - The
PopUpButton value as string, or nil if the value cannot be determined.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.PopUpButton:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a `PopUpButton` layout. |
+| **Parameters** | - layout - A table containing the
PopUpButton layout settings - created using saveLayout.
|
+| **Returns** | |
+
+#### [press](#press)
+| **Signature** | `cp.ui.PopUpButton:press() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the `PopUpButton`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.PopUpButton:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current `PopUpButton` layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current
PopUpButton Layout.
|
+
+#### [selectItem](#selectitem)
+| **Signature** | `cp.ui.PopUpButton:selectItem(index) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select an item on the `PopUpButton` by index. |
+| **Parameters** | - index - The index of the item you want to select.
|
+| **Returns** | |
+
+#### [setValue](#setvalue)
+| **Signature** | `cp.ui.PopUpButton:setValue(value) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the `PopUpButton` value. |
+| **Parameters** | - value - The value you want to set the
PopUpButton to.
|
+| **Returns** | |
diff --git a/api/cp/cp.ui.Popover.md b/api/cp/cp.ui.Popover.md
new file mode 100644
index 0000000..092b83c
--- /dev/null
+++ b/api/cp/cp.ui.Popover.md
@@ -0,0 +1,45 @@
+# [docs](index.md) » cp.ui.Popover
+---
+
+UI Group.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Popover](#popover)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [hide](#hide)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Popover.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Popover](#popover)
+| **Signature** | `cp.ui.Popover(parent, uiFinder) -> Popover` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Popover` instance. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
+### Methods
+
+#### [hide](#hide)
+| **Signature** | `cp.ui.Popover:hide() -> Popover` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides a popover. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.PropertyRow.md b/api/cp/cp.ui.PropertyRow.md
new file mode 100644
index 0000000..05188b1
--- /dev/null
+++ b/api/cp/cp.ui.PropertyRow.md
@@ -0,0 +1,191 @@
+# [docs](index.md) » cp.ui.PropertyRow
+---
+
+Represents a single property row, typically in a Property Inspector.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [intersectBuffer](#intersectbuffer)
+* Functions - API calls offered directly by the extension
+ * [isParent](#isparent)
+ * [matches](#matches)
+ * [parentUIFinder](#parentuifinder)
+ * [prepareParent](#prepareparent)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [PropertyRow](#propertyrow)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [label](#label)
+ * [labelUI](#labelui)
+ * [propertiesUI](#propertiesui)
+ * [reset](#reset)
+ * [UI](#ui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [children](#children)
+ * [doHide](#dohide)
+ * [doShow](#doshow)
+ * [extend](#extend)
+ * [hide](#hide)
+ * [labelKeys](#labelkeys)
+ * [parent](#parent)
+ * [show](#show)
+
+## API Documentation
+
+### Constants
+
+#### [intersectBuffer](#intersectbuffer)
+| **Signature** | `cp.ui.PropertyRow.intersectBuffer` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | Defines the buffer for intersections with the `labelUI`. |
+
+### Functions
+
+#### [isParent](#isparent)
+| **Signature** | `cp.ui.PropertyRow.isParent(parent) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `parent` has been prepared via [prepareParent](#prepareParent). |
+| **Parameters** | |
+| **Returns** | true if the parent is prepared.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.PropertyRow.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `axuielement` could be a property row. |
+| **Parameters** | - element - The element to check.
|
+| **Returns** | true if the element could be a property row.
|
+
+#### [parentUIFinder](#parentuifinder)
+| **Signature** | `cp.ui.PropertyRow.parentUIFinder(parent) -> cp.prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the `cp.prop` which finds the `hs._asm.axuielement` that contains property rows from the parent. |
+| **Parameters** | - parent - The parent which has a finder assigned.
|
+| **Returns** | - The
cp.prop which provides access to the finder, or nil.
|
+
+#### [prepareParent](#prepareparent)
+| **Signature** | `cp.ui.PropertyRow.prepareParent(parent, uiFinder) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Call this to make `parent` table ready to be a parent of `PropertyRow`s. |
+| **Parameters** | - parent - The parent table.
- uiFinder - The function or cp.prop which will be called to find the parent UI element. Functions will be passed the
parent when being executed.
|
+| **Returns** | |
+
+### Constructors
+
+#### [PropertyRow](#propertyrow)
+| **Signature** | `cp.ui.PropertyRow(parent, labelKey[, index]) -> cp.ui.PropertyRow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `PropertyRow` with the specified parent and label key. |
+| **Parameters** | - parent - The parent object.
- labelKey - The key of the label that the row will map to.
- index - The row number with the same label to get. Defaults to
1.
|
+| **Returns** | - The new
PropertyRow instance.
|
+
+### Fields
+
+#### [label](#label)
+| **Signature** | `cp.ui.PropertyRow.label ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The label of the property row, in the current langauge. |
+
+#### [labelUI](#labelui)
+| **Signature** | `cp.ui.PropertyRow.labelUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` for the label UI. |
+
+#### [propertiesUI](#propertiesui)
+| **Signature** | `cp.ui.PropertyRow.propertiesUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `axuielement` from the parent that contains the properties. |
+
+#### [reset](#reset)
+| **Signature** | `cp.ui.PropertyRow.reset ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `reset` button for the row, which may or may not actually exist. |
+
+#### [UI](#ui)
+| **Signature** | `cp.ui.PropertyRow.UI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` for the row. |
+
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.ui.PropertyRow:app() -> App` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the app instance. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [children](#children)
+| **Signature** | `cp.ui.PropertyRow:children() -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets a table of children for the Property Row. |
+| **Parameters** | |
+| **Returns** | - A table of children or
nil.
|
+
+#### [doHide](#dohide)
+| **Signature** | `cp.ui.PropertyRow:doHide() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to hide the `PropertyRow`. |
+| **Returns** | |
+
+#### [doShow](#doshow)
+| **Signature** | `cp.ui.PropertyRow:doShow() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that shows the `PropertyRow`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [extend](#extend)
+| **Signature** | `cp.ui.PropertyRow:extend(extendFn) -> cp.ui.PropertyRow` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | This method will call the provided function, passing it the current `PropertyRow`. |
+| **Parameters** | - extendFn - A
function that will be passed the current row.
|
+| **Returns** | - The same
PropertyRow instance.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.ui.PropertyRow:hide() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the `PropertyRow`. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [labelKeys](#labelkeys)
+| **Signature** | `cp.ui.PropertyRow:labelKeys() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the key of the label that the row will map to. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [parent](#parent)
+| **Signature** | `cp.ui.PropertyRow:parent() -> parent` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the parent object. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [show](#show)
+| **Signature** | `cp.ui.PropertyRow:show() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows the `PropertyRow`. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.RadioButton.md b/api/cp/cp.ui.RadioButton.md
index d414900..a58b040 100644
--- a/api/cp/cp.ui.RadioButton.md
+++ b/api/cp/cp.ui.RadioButton.md
@@ -3,17 +3,137 @@
Radio Button Module.
+This represents an `hs._asm.axuielement` with a `AXRadioButton` role.
+It allows checking and modifying the `checked` status like so:
+
+```lua
+myButton:checked() == true -- happens to be checked already
+myButton:checked(false) == false -- update to unchecked.
+myButton.checked:toggle() == true -- toggled back to being checked.
+```
+
+You can also call instances of `RadioButton` as a function, which will return
+the `checked` status:
+
+```lua
+myButton() == true -- still true
+myButton(false) == false -- now false
+```
+
## API Overview
* Functions - API calls offered directly by the extension
- * [new](#new)
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [checked](#checked)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doCheck](#docheck)
+ * [doLayout](#dolayout)
+ * [doPress](#dopress)
+ * [doToggle](#dotoggle)
+ * [doUncheck](#douncheck)
+ * [loadLayout](#loadlayout)
+ * [press](#press)
+ * [RadioButton](#radiobutton)
+ * [saveLayout](#savelayout)
+ * [toggle](#toggle)
## API Documentation
### Functions
-#### [new](#new)
-| **Signature** | `cp.ui.RadioButton:new(axuielement, function) -> RadioButton` |
+#### [matches](#matches)
+| **Signature** | `cp.ui.RadioButton.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `hs._asm.axuielement` is a RadioButton. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it's a match, or false if not.
|
+
+### Fields
+
+#### [checked](#checked)
+| **Signature** | `cp.ui.RadioButton.checked ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the checkbox is currently checked. |
+
+### Methods
+
+#### [doCheck](#docheck)
+| **Signature** | `cp.ui.RadioButton:doCheck() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will check the button value when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will toggle the button when executed.
|
+
+#### [doLayout](#dolayout)
+| **Signature** | `cp.ui.RadioButton:doLayout(layout) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will apply the layout provided, if possible. |
+| **Parameters** | - layout - the
table containing the layout configuration. Usually created via the [#saveLayout] method.
|
+| **Returns** | |
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.RadioButton:doPress() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will press the button when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will press the button when executed.
|
+
+#### [doToggle](#dotoggle)
+| **Signature** | `cp.ui.RadioButton:doToggle() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will toggle the button value when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will toggle the button when executed.
|
+
+#### [doUncheck](#douncheck)
+| **Signature** | `cp.ui.RadioButton:doUncheck() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will uncheck the button value when executed, if available at the time. |
+| **Parameters** | |
+| **Returns** | - The
Statement which will toggle the button when executed.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.RadioButton:loadLayout(layout) -> nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Processes the `layout` table to restore this to match the provided `layout`. |
+| **Parameters** | - layout - the table of state values to restore to.
|
+
+#### [press](#press)
+| **Signature** | `cp.ui.RadioButton:press() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to press the button. May fail if the `UI` is not available. |
+| **Parameters** | |
+| **Returns** | The RadioButton instance.
|
+
+#### [RadioButton](#radiobutton)
+| **Signature** | `cp.ui.RadioButton(axuielement, function) -> RadioButton` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new RadioButton. |
+| **Parameters** | - parent - The parent object.
- finderFn - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.RadioButton:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `table` with the button's current state. This can be passed to [#loadLayout] |
+| **Returns** | - The table of the layout state.
|
+
+#### [toggle](#toggle)
+| **Signature** | `cp.ui.RadioButton:toggle() -> self` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new RadioButton |
+| **Type** | Method |
+| **Description** | Toggles the `checked` status of the button. |
+| **Parameters** | |
+| **Returns** | - The
RadioButton instance.
|
diff --git a/api/cp/cp.ui.RadioGroup.md b/api/cp/cp.ui.RadioGroup.md
new file mode 100644
index 0000000..253ab6b
--- /dev/null
+++ b/api/cp/cp.ui.RadioGroup.md
@@ -0,0 +1,114 @@
+# [docs](index.md) » cp.ui.RadioGroup
+---
+
+Represents an `AXRadioGroup`, providing utility methods.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [RadioGroup](#radiogroup)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [optionCount](#optioncount)
+ * [options](#options)
+ * [optionsUI](#optionsui)
+ * [selectedOption](#selectedoption)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doNextOption](#donextoption)
+ * [doPreviousOption](#dopreviousoption)
+ * [doSelectOption](#doselectoption)
+ * [nextOption](#nextoption)
+ * [previousOption](#previousoption)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.RadioGroup.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the provided `axuielement` is a RadioGroup. |
+| **Parameters** | - element - The element to check.
|
+| **Returns** | true if the element is a RadioGroup.
|
+
+### Constructors
+
+#### [RadioGroup](#radiogroup)
+| **Signature** | `cp.ui.RadioGroup(parent, uiFinder[, createOptionFn]) -> cp.ui.RadioGroup` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new RadioGroup. |
+| **Parameters** | - parent - The parent table.
- uiFinder - The function which will find the
axuielement representing the RadioGroup. - createOptionFn - If provided a function that receives the
RadioGroup and an axuielement for a given option within the group.
|
+| **Returns** | - The new
RadioGroup instance.
|
+
+### Fields
+
+#### [optionCount](#optioncount)
+| **Signature** | `cp.ui.RadioGroup.optionCount ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The number of options in the group. |
+
+#### [options](#options)
+| **Signature** | `cp.ui.RadioGroup.options ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `table` containing `cp.ui.Element` available in the radio group. |
+| **Returns** | |
+
+#### [optionsUI](#optionsui)
+| **Signature** | `cp.ui.RadioGroup.optionsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `cp.prop` containing `table` of `axuielement` options available in the radio group. |
+| **Returns** | |
+
+#### [selectedOption](#selectedoption)
+| **Signature** | `cp.ui.RadioGroup.selectedOption ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The currently selected option number. |
+
+### Methods
+
+#### [doNextOption](#donextoption)
+| **Signature** | `cp.ui.RadioGroup:doNextOption() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that selects the next option in the group. |
+| **Parameters** | |
+| **Returns** | - The
Statement, that resolves to true if successful or sends an error if not.
|
+
+#### [doPreviousOption](#dopreviousoption)
+| **Signature** | `cp.ui.RadioGroup:doPreviousOption() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that selects the previous option in the group. |
+| **Parameters** | |
+| **Returns** | - The
Statement, which resolves to true if successful or sends an error if not..
|
+
+#### [doSelectOption](#doselectoption)
+| **Signature** | `cp.ui.RadioGroup:doSelectOption(index) -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) which will attempt to select the option at the specified `index`. |
+| **Parameters** | - index - The index to select. Must be between 1 and optionCount.
|
+| **Returns** | - The
Statement, which will resolve to true if successful or send an error if not.
|
+
+#### [nextOption](#nextoption)
+| **Signature** | `cp.ui.RadioGroup:nextOption() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects the next option in the group. Cycles from the last to the first option. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [previousOption](#previousoption)
+| **Signature** | `cp.ui.RadioGroup:previousOption() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Selects the previous option in the group. Cycles from the first to the last item. |
+| **Parameters** | |
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Row.md b/api/cp/cp.ui.Row.md
new file mode 100644
index 0000000..4b064b8
--- /dev/null
+++ b/api/cp/cp.ui.Row.md
@@ -0,0 +1,79 @@
+# [docs](index.md) » cp.ui.Row
+---
+
+Represents an `AXRow` `axuielement`.
+
+## API Overview
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Row](#row)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [disclosing](#disclosing)
+ * [disclosureLevel](#disclosurelevel)
+ * [index](#index)
+ * [selected](#selected)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [disclosedByRow](#disclosedbyrow)
+ * [disclosedRows](#disclosedrows)
+ * [matches](#matches)
+
+## API Documentation
+
+### Constructors
+
+#### [Row](#row)
+| **Signature** | `cp.ui.Row(parent, uiFinder) -> cp.ui.Row` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Row` instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent
Element. - uiFinder - a
function or cp.prop containing the axuielement
|
+| **Returns** | |
+
+### Fields
+
+#### [disclosing](#disclosing)
+| **Signature** | `cp.ui.Row.disclosing ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the `Row` is disclosing other `Rows`. |
+
+#### [disclosureLevel](#disclosurelevel)
+| **Signature** | `cp.ui.Row.disclosureLevel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The depth of disclosure. `0` is the top level. |
+
+#### [index](#index)
+| **Signature** | `cp.ui.Row.index ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The numeric index of this row in the overall container, with `0` being the first item. |
+
+#### [selected](#selected)
+| **Signature** | `cp.ui.Row.selected ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Indicates if the row is currently selected. May be set. |
+
+### Methods
+
+#### [disclosedByRow](#disclosedbyrow)
+| **Signature** | `cp.ui.Row:disclosedByRow() -> cp.ui.Row` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | The `Row` which is disclosing this `Row`. |
+
+#### [disclosedRows](#disclosedrows)
+| **Signature** | `cp.ui.Row:disclosedRows() -> table of cp.ui.Row or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | If available, returns a table of [Row](cp.ui.Row.md)s that are disclosed by this `Row`. |
+| **Returns** | - The
table of Rows, or nil.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Row.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the element is a `Row`. |
+| **Parameters** | - element - the
axuielement to check.
|
+| **Returns** | true if it matches, otherwise false.
|
+
diff --git a/api/cp/cp.ui.ScrollArea.md b/api/cp/cp.ui.ScrollArea.md
index 0c37a39..8fe9a5f 100644
--- a/api/cp/cp.ui.ScrollArea.md
+++ b/api/cp/cp.ui.ScrollArea.md
@@ -4,6 +4,181 @@
Scroll Area Module.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ScrollArea](#scrollarea)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contentsUI](#contentsui)
+ * [horizontalScrollBar](#horizontalscrollbar)
+ * [selectedChildrenUI](#selectedchildrenui)
+ * [verticalScrollBar](#verticalscrollbar)
+ * [viewFrame](#viewframe)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [childrenUI](#childrenui)
+ * [deselectAll](#deselectall)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [selectAll](#selectall)
+ * [selectChild](#selectchild)
+ * [selectChildAt](#selectchildat)
+ * [shiftHorizontalBy](#shifthorizontalby)
+ * [shiftHorizontalTo](#shifthorizontalto)
+ * [shiftVerticalBy](#shiftverticalby)
+ * [shiftVerticalTo](#shiftverticalto)
+ * [showChild](#showchild)
+ * [showChildAt](#showchildat)
## API Documentation
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.ScrollArea.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [ScrollArea](#scrollarea)
+| **Signature** | `cp.ui.ScrollArea(parent, uiFinder) -> cp.ui.ScrollArea` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ScrollArea`. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A
function or cp.prop which will return the hs._asm.axuielement when available.
|
+| **Returns** | |
+
+### Fields
+
+#### [contentsUI](#contentsui)
+| **Signature** | `cp.ui.ScrollArea.contentsUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` representing the Scroll Area Contents, or `nil` if not available. |
+
+#### [horizontalScrollBar](#horizontalscrollbar)
+| **Signature** | `cp.ui.ScrollArea.horizontalScrollBar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The horizontal [ScrollBar](cp.ui.ScrollBar.md). |
+
+#### [selectedChildrenUI](#selectedchildrenui)
+| **Signature** | `cp.ui.ScrollArea.selectedChildrenUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` representing the Scroll Area Selected Children, or `nil` if not available. |
+
+#### [verticalScrollBar](#verticalscrollbar)
+| **Signature** | `cp.ui.ScrollArea.verticalScrollBar ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The vertical [ScrollBar](cp.ui.ScrollBar.md). |
+
+#### [viewFrame](#viewframe)
+| **Signature** | `cp.ui.ScrollArea.viewFrame ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | A `cp.prop` reporting the Scroll Area frame as a hs.geometry.rect. |
+
+### Methods
+
+#### [childrenUI](#childrenui)
+| **Signature** | `cp.ui.ScrollArea:childrenUI(filterFn) -> hs._asm.axuielement | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the `axuielement` representing the Scroll Area Contents, or `nil` if not available. |
+| **Parameters** | - filterFn - The function which checks if the child matches the requirements.
|
+
+#### [deselectAll](#deselectall)
+| **Signature** | `cp.ui.ScrollArea:deselectAll() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Deselect all children in a scroll area. |
+| **Parameters** | |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.ScrollArea:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Scroll Area layout. |
+| **Parameters** | - layout - A table containing the ScrollArea layout settings, typically created using saveLayout.
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.ScrollArea:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Scroll Area layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Scroll Area Layout.
|
+
+#### [selectAll](#selectall)
+| **Signature** | `cp.ui.ScrollArea:selectAll(childrenUI) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select all children in a scroll area. |
+| **Parameters** | - childrenUI - A table of
hs._asm.axuielement objects.
|
+
+#### [selectChild](#selectchild)
+| **Signature** | `cp.ui.ScrollArea:selectChild(childUI) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select a specific child within a Scroll Area. |
+| **Parameters** | - childUI - The
hs._asm.axuielement object of the child you want to select.
|
+
+#### [selectChildAt](#selectchildat)
+| **Signature** | `cp.ui.ScrollArea:selectChildAt(index) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select a child element in a Scroll Area given a specific index. |
+| **Parameters** | - index - The index of the child you want to select.
|
+
+#### [shiftHorizontalBy](#shifthorizontalby)
+| **Signature** | `cp.ui.ScrollArea:shiftHorizontalBy(amount) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to shift the horizontal scroll bar by the specified amount. |
+| **Parameters** | - amount - The amount to shift
|
+| **Returns** | - The actual value of the horizontal scroll bar.
|
+
+#### [shiftHorizontalTo](#shifthorizontalto)
+| **Signature** | `cp.ui.ScrollArea:shiftHorizontalTo(value) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to shift the horizontal scroll bar to the specified value. |
+| **Parameters** | - value - The new value (typically between
0 and 1).
|
+| **Returns** | - The actual value of the horizontal scroll bar.
|
+
+#### [shiftVerticalBy](#shiftverticalby)
+| **Signature** | `cp.ui.ScrollArea:shiftVerticalBy(amount) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to shift the vertical scroll bar by the specified amount. |
+| **Parameters** | - amount - The amount to shift
|
+| **Returns** | - The actual value of the vertical scroll bar.
|
+
+#### [shiftVerticalTo](#shiftverticalto)
+| **Signature** | `cp.ui.ScrollArea:shiftVerticalTo(value) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to shift the vertical scroll bar to the specified value. |
+| **Parameters** | - value - The new value (typically between
0 and 1).
|
+| **Returns** | - The actual value of the vertical scroll bar.
|
+
+#### [showChild](#showchild)
+| **Signature** | `cp.ui.ScrollArea:showChild(childUI) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's a child element in a Scroll Area. |
+| **Parameters** | - childUI - The
hs._asm.axuielement object of the child you want to show.
|
+
+#### [showChildAt](#showchildat)
+| **Signature** | `cp.ui.ScrollArea:showChildAt(index) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Show's a child element in a Scroll Area given a specific index. |
+| **Parameters** | - index - The index of the child you want to show.
|
+
diff --git a/api/cp/cp.ui.ScrollBar.md b/api/cp/cp.ui.ScrollBar.md
new file mode 100644
index 0000000..379692a
--- /dev/null
+++ b/api/cp/cp.ui.ScrollBar.md
@@ -0,0 +1,113 @@
+# [docs](index.md) » cp.ui.ScrollBar
+---
+
+Provides access to `AXScrollBar` `axuielement` values.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [HORIZONTAL_ORIENTATION](#horizontal_orientation)
+ * [VERTICAL_ORIENTATION](#vertical_orientation)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [ScrollBar](#scrollbar)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [hidden](#hidden)
+ * [horizontal](#horizontal)
+ * [orientation](#orientation)
+ * [value](#value)
+ * [vertical](#vertical)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [loadLayout](#loadlayout)
+ * [matches](#matches)
+ * [saveLayout](#savelayout)
+ * [shiftValueBy](#shiftvalueby)
+
+## API Documentation
+
+### Constants
+
+#### [HORIZONTAL_ORIENTATION](#horizontal_orientation)
+| **Signature** | `cp.ui.ScrollBar.HORIZONTAL_ORIENTATION ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The value for `AXOrientation` when it is horizontal. |
+
+#### [VERTICAL_ORIENTATION](#vertical_orientation)
+| **Signature** | `cp.ui.ScrollBar.VERTICAL_ORIENTATION ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The value for `AXOrientation` when it is vertical. |
+
+### Constructors
+
+#### [ScrollBar](#scrollbar)
+| **Signature** | `cp.ui.ScrollBar(parent, uiFinder) -> cp.ui.ScrollBar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `ScrollBar` instance with the specified `parent` and `uiFinder`. |
+| **Parameters** | - parent - the parent object.
- uiFinder - a
function or cp.prop that provides the AXScrollBar axuielement.
|
+| **Returns** | |
+
+### Fields
+
+#### [hidden](#hidden)
+| **Signature** | `cp.ui.ScrollBar.hidden ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the `ScrollBar` is currently hidden. |
+
+#### [horizontal](#horizontal)
+| **Signature** | `cp.ui.ScrollBar.horizontal ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the `ScrollBar` is horizontal, otherwise `false`. |
+
+#### [orientation](#orientation)
+| **Signature** | `cp.ui.ScrollBar.orientation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `AXOrientation` string. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.ScrollBar.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is the numeric scroll value, typically between `0.0` and `1.0`. May be set. |
+
+#### [vertical](#vertical)
+| **Signature** | `cp.ui.ScrollBar.vertical ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the `ScrollBar` is vertical, otherwise `false`. |
+
+### Methods
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.ScrollBar:loadLayout(layout)` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads the provided `layout` table of configuration parameters. |
+| **Parameters** | - layout - the table of parameters.
|
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.ScrollBar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if the element is a `ScrollBar`. |
+| **Parameters** | - element - The
axuielement being matched.
|
+| **Returns** | true if matches, otherwise false.
|
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.ScrollBar:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the `ScrollBar` layout configuration. |
+| **Returns** | - a
table with the configuration parameters.
|
+
+#### [shiftValueBy](#shiftvalueby)
+| **Signature** | `cp.ui.ScrollBar:shiftValueBy(amount) -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to shift the value by the specified amount. |
+| **Parameters** | - amount - The amount to shift by.
|
+| **Returns** | - The new value, or
nil if not available.
|
+
diff --git a/api/cp/cp.ui.SearchField.md b/api/cp/cp.ui.SearchField.md
new file mode 100644
index 0000000..dbf2d25
--- /dev/null
+++ b/api/cp/cp.ui.SearchField.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.ui.SearchField
+---
+
+A [TextField](cp.ui.TextField.md) with a subrole of `AXSearchField`.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matchesSearch](#matchessearch)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [SearchField](#searchfield)
+
+## API Documentation
+
+### Functions
+
+#### [matchesSearch](#matchessearch)
+| **Signature** | `cp.ui.SearchField.matchesSearch(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element is a `AXTextField` with a subrole of `AXSearchField`. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches, otherwise false.
|
+
+### Methods
+
+#### [SearchField](#searchfield)
+| **Signature** | `cp.ui.SearchField(parent, uiFinder[, convertFn]) -> cp.ui.SearchField` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new SearchField. They have a parent and a finder function. |
+| **Parameters** | - parent - The parent object.
- uiFinder - The function will return the
axuielement for the SearchField. - convertFn - (optional) If provided, will be passed the
string value when returning.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Sheet.md b/api/cp/cp.ui.Sheet.md
new file mode 100644
index 0000000..ac14fee
--- /dev/null
+++ b/api/cp/cp.ui.Sheet.md
@@ -0,0 +1,132 @@
+# [docs](index.md) » cp.ui.Sheet
+---
+
+Sheet UI Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Sheet](#sheet)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [cancel](#cancel)
+ * [default](#default)
+ * [title](#title)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [containsText](#containstext)
+ * [doCancel](#docancel)
+ * [doDefault](#dodefault)
+ * [doHide](#dohide)
+ * [doPress](#dopress)
+ * [hide](#hide)
+ * [pressCancel](#presscancel)
+ * [pressDefault](#pressdefault)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Sheet.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [Sheet](#sheet)
+| **Signature** | `cp.ui.Sheet(parent, uiFinder) -> Sheet` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Sheet` instance. |
+| **Parameters** | - parent - The parent object.
- uiFinder - The UI, either a
cp.prop or a function.
|
+| **Returns** | |
+
+### Fields
+
+#### [cancel](#cancel)
+| **Signature** | `cp.ui.Sheet.cancel ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The cancel [Button](cp.ui.Button.md) for the `Sheet`. |
+
+#### [default](#default)
+| **Signature** | `cp.ui.Sheet.default ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The default [Button](cp.ui.Button.md) for the `Sheet`. |
+
+#### [title](#title)
+| **Signature** | `cp.ui.Sheet.title ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the title of the sheet. |
+
+### Methods
+
+#### [containsText](#containstext)
+| **Signature** | `cp.ui.Sheet:containsText(value[, plain]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Checks if there are any child text elements containing the exact text or pattern, from beginning to end. |
+| **Parameters** | - textPattern - The text pattern to check.
- plain - If
true, the text will be compared exactly, otherwise it will be considered to be a pattern. Defaults to false.
|
+| **Returns** | true if an element's AXValue matches the text pattern exactly.
|
+
+#### [doCancel](#docancel)
+| **Signature** | `cp.ui.Sheet:doCancel() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to hide the Sheet (if visible) by pressing the [Cancel](#cancel) button. |
+| **Parameters** | |
+| **Returns** | - A Statement to execute, resolving to
true if the button was present and clicked, otherwise false.
|
+
+#### [doDefault](#dodefault)
+| **Signature** | `cp.ui.Sheet:doDefault() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to press the `default` [Button](cp.ui.Button.md). |
+| **Parameters** | |
+| **Returns** | - A Statement to execute, resolving to
true if the button was present and clicked, otherwise false.
|
+
+#### [doHide](#dohide)
+| **Signature** | `cp.ui.Sheet:doHide() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to hide the Sheet (if visible) by pressing the [Cancel](#cancel) button. |
+| **Parameters** | |
+| **Returns** | - A Statement to execute, resolving to
true if the button was present and clicked, otherwise false.
|
+
+#### [doPress](#dopress)
+| **Signature** | `cp.ui.Sheet:doPress(buttonFromLeft) -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to press the indicated button from left-to-right, if it can be found. |
+| **Parameters** | - buttonFromLeft - The number of the button from left-to-right.
|
+| **Returns** | - a Statement to execute, resolving in
true if the button was found and pressed, otherwise false.
|
+
+#### [hide](#hide)
+| **Signature** | `cp.ui.Sheet:hide() -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Hides the sheet by pressing the "Cancel" button, if it exists. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [pressCancel](#presscancel)
+| **Signature** | `cp.ui.Sheet:pressCancel() -> self, boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the Cancel button. |
+| **Parameters** | |
+| **Returns** | - The
Sheet object. true if successful, otherwise false.
|
+
+#### [pressDefault](#pressdefault)
+| **Signature** | `cp.ui.Sheet:pressDefault() -> self, boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Presses the Default button. |
+| **Parameters** | |
+| **Returns** | - The
Sheet object. true if successful, otherwise false.
|
+
diff --git a/api/cp/cp.ui.Slider.md b/api/cp/cp.ui.Slider.md
index 314fa07..868d7fe 100644
--- a/api/cp/cp.ui.Slider.md
+++ b/api/cp/cp.ui.Slider.md
@@ -5,15 +5,137 @@ Slider Module.
## API Overview
* Functions - API calls offered directly by the extension
- * [new](#new)
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Slider](#slider)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [maxValue](#maxvalue)
+ * [minValue](#minvalue)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [decrement](#decrement)
+ * [getMaxValue](#getmaxvalue)
+ * [getMinValue](#getminvalue)
+ * [getValue](#getvalue)
+ * [increment](#increment)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [setValue](#setvalue)
+ * [shiftValue](#shiftvalue)
## API Documentation
### Functions
-#### [new](#new)
-| **Signature** | `cp.ui.Slider:new(axuielement, function) -> Slider` |
+#### [matches](#matches)
+| **Signature** | `cp.ui.Slider.matches(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new Slider |
+| **Type** | Function |
+| **Description** | Checks if the provided `hs._asm.axuielement` is a Slider. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | true if it's a match, or false if not.
|
+
+### Constructors
+
+#### [Slider](#slider)
+| **Signature** | `cp.ui.Slider(parent, uiFinder) -> cp.ui.Slider` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Slider |
+| **Parameters** | - parent - The parent object. Should have an
isShowing property. - uiFinder - The function which returns an
hs._asm.axuielement for the slider, or nil.
|
+| **Returns** | |
+
+### Fields
+
+#### [maxValue](#maxvalue)
+| **Signature** | `cp.ui.Slider.maxValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the maximum value of the slider. |
+
+#### [minValue](#minvalue)
+| **Signature** | `cp.ui.Slider.minValue ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Gets the minimum value of the slider. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.Slider.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Sets or gets the value of the slider. |
+
+### Methods
+
+#### [decrement](#decrement)
+| **Signature** | `cp.ui.Slider:decrement() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Decrements the slider by one step. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getMaxValue](#getmaxvalue)
+| **Signature** | `cp.ui.Slider:getMaxValue() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the maximum value of the slider. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getMinValue](#getminvalue)
+| **Signature** | `cp.ui.Slider:getMinValue() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the minimum value of the slider. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [getValue](#getvalue)
+| **Signature** | `cp.ui.Slider:getValue() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the value of the slider. |
+| **Parameters** | |
+| **Returns** | - The value of the slider as a number.
|
+
+#### [increment](#increment)
+| **Signature** | `cp.ui.Slider:increment() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Increments the slider by one step. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.Slider:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Slider layout. |
+| **Parameters** | - layout - A table containing the Slider layout settings - created using [saveLayout](#saveLayout].
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.Slider:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Slider layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Slider Layout.
|
+
+#### [setValue](#setvalue)
+| **Signature** | `cp.ui.Slider:setValue(value) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the value of the slider. |
+| **Parameters** | - value - The value you want to set the slider to as a number.
|
+| **Returns** | |
+
+#### [shiftValue](#shiftvalue)
+| **Signature** | `cp.ui.Slider:shiftValue(value) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shifts the value of the slider. |
+| **Parameters** | - value - The value you want to shift the slider by as a number.
|
+| **Returns** | |
diff --git a/api/cp/cp.ui.SplitGroup.md b/api/cp/cp.ui.SplitGroup.md
new file mode 100644
index 0000000..52f0796
--- /dev/null
+++ b/api/cp/cp.ui.SplitGroup.md
@@ -0,0 +1,33 @@
+# [docs](index.md) » cp.ui.SplitGroup
+---
+
+Split Group UI.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [SplitGroup](#splitgroup)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.SplitGroup.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [SplitGroup](#splitgroup)
+| **Signature** | `cp.ui.SplitGroup(parent, uiFinder) -> cp.ui.SplitGroup` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Split Group. |
+| **Parameters** | - parent - The parent object.
- uiFinder - The
function or cp.prop which returns an hs._asm.axuielement for the Split Group, or nil.
|
+| **Returns** | - A new
SplitGroup instance.
|
+
diff --git a/api/cp/cp.ui.Splitter.md b/api/cp/cp.ui.Splitter.md
new file mode 100644
index 0000000..c626d72
--- /dev/null
+++ b/api/cp/cp.ui.Splitter.md
@@ -0,0 +1,50 @@
+# [docs](index.md) » cp.ui.Splitter
+---
+
+Represents an `AXSplitter`.
+
+## API Overview
+* Constants - Useful values which cannot be changed
+ * [HORIZONTAL_ORIENTATION](#horizontal_orientation)
+ * [VERTICAL_ORIENTATION](#vertical_orientation)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [horizontal](#horizontal)
+ * [orientation](#orientation)
+ * [vertical](#vertical)
+
+## API Documentation
+
+### Constants
+
+#### [HORIZONTAL_ORIENTATION](#horizontal_orientation)
+| **Signature** | `cp.ui.Splitter.HORIZONTAL_ORIENTATION ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The value for `AXOrientation` when it is horizontal. |
+
+#### [VERTICAL_ORIENTATION](#vertical_orientation)
+| **Signature** | `cp.ui.Splitter.VERTICAL_ORIENTATION ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constant |
+| **Description** | The value for `AXOrientation` when it is vertical. |
+
+### Fields
+
+#### [horizontal](#horizontal)
+| **Signature** | `cp.ui.Splitter.horizontal ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the `Splitter` is horizontal, otherwise `false`. |
+
+#### [orientation](#orientation)
+| **Signature** | `cp.ui.Splitter.orientation ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The `AXOrientation` string. |
+
+#### [vertical](#vertical)
+| **Signature** | `cp.ui.Splitter.vertical ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Is `true` if the `Splitter` is vertical, otherwise `false`. |
+
diff --git a/api/cp/cp.ui.StaticText.md b/api/cp/cp.ui.StaticText.md
new file mode 100644
index 0000000..2a48b2b
--- /dev/null
+++ b/api/cp/cp.ui.StaticText.md
@@ -0,0 +1,70 @@
+# [docs](index.md) » cp.ui.StaticText
+---
+
+Static Text Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [clear](#clear)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [StaticText](#statictext)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.StaticText.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element is a Static Text element. |
+| **Parameters** | - element - The
axuielement to check.
|
+| **Returns** | - If
true, the element is a Static Text element.
|
+
+### Fields
+
+#### [value](#value)
+| **Signature** | `cp.ui.StaticText.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current value of the text field. |
+
+### Methods
+
+#### [clear](#clear)
+| **Signature** | `cp.ui.StaticText:clear() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Clears the value of a Static Text box. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.StaticText:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Static Text layout. |
+| **Parameters** | - layout - A table containing the Static Text layout settings - created using
cp.ui.StaticText:saveLayout().
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.StaticText:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Static Text layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Static Text Layout.
|
+
+#### [StaticText](#statictext)
+| **Signature** | `cp.ui.StaticText(parent, uiFinder[, convertFn]) -> StaticText` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new StaticText. They have a parent and a finder function. |
+| **Parameters** | - parent - The parent object.
- uiFinder - The function will return the
axuielement for the StaticText. - convertFn - (optional) If provided, will be passed the
string value when returning.
|
+| **Returns** | |
+
diff --git a/api/cp/cp.ui.Table.md b/api/cp/cp.ui.Table.md
index 36bac8b..43d4f55 100644
--- a/api/cp/cp.ui.Table.md
+++ b/api/cp/cp.ui.Table.md
@@ -14,18 +14,31 @@ Represents an AXTable in the Apple Accessibility UX API.
* [matchesContent](#matchescontent)
* [visitRow](#visitrow)
* Constructors - API calls which return an object, typically one that offers API methods
- * [new](#new)
-* Methods - API calls which can only be made on an object returned by a constructor
- * [columnsUI](#columnsui)
+ * [Table](#table)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [contentUI](#contentui)
* [horizontalScrollBarUI](#horizontalscrollbarui)
* [isFocused](#isfocused)
- * [isShowing](#isshowing)
- * [parent](#parent)
+ * [verticalScrollBarUI](#verticalscrollbarui)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [columnsUI](#columnsui)
+ * [deselectAll](#deselectall)
+ * [deselectRow](#deselectrow)
+ * [deselectRowAt](#deselectrowat)
+ * [findCellUI](#findcellui)
+ * [findColumnIndex](#findcolumnindex)
+ * [loadLayout](#loadlayout)
* [rowsUI](#rowsui)
+ * [saveLayout](#savelayout)
+ * [selectAll](#selectall)
+ * [selectedRowsUI](#selectedrowsui)
+ * [selectRow](#selectrow)
+ * [selectRowAt](#selectrowat)
+ * [showRow](#showrow)
+ * [showRowAt](#showrowat)
+ * [toCSV](#tocsv)
* [topRowsUI](#toprowsui)
- * [UI](#ui)
- * [uncached](#uncached)
- * [verticalScrollBarUI](#verticalscrollbarui)
+ * [viewFrame](#viewframe)
## API Documentation
@@ -34,154 +47,237 @@ Represents an AXTable in the Apple Accessibility UX API.
#### [cellTextValue](#celltextvalue)
| **Signature** | `cp.ui.Table.cellTextValue(cell) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the cell's text value. |
-| **Parameters** | - `cell` - The cell to check
|
-| **Returns** | - The combined text value of the cell.
|
+| **Type** | Function |
+| **Description** | Returns the cell's text value. |
+| **Parameters** | |
+| **Returns** | - The combined text value of the cell.
|
#### [cellTextValueIs](#celltextvalueis)
| **Signature** | `cp.ui.Table.cellTextValueIs(cell, value) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the cell's text value equals `value`. |
-| **Parameters** | - `cell` - The cell to check
- `value` - The text value to compare.
|
-| **Returns** | - `true` if the cell text value equals the provided `value`.
|
+| **Type** | Function |
+| **Description** | Checks if the cell's text value equals `value`. |
+| **Parameters** | cell - The cell to checkvalue - The text value to compare.
|
+| **Returns** | true if the cell text value equals the provided value.
|
#### [discloseRow](#discloserow)
| **Signature** | `cp.ui.Table.discloseRow(row) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Discloses the row, if possible. |
-| **Parameters** | - `row` - The row to disclose
|
-| **Returns** | - `true` if the row is disclosable and is now expanded.
|
+| **Type** | Function |
+| **Description** | Discloses the row, if possible. |
+| **Parameters** | row - The row to disclose
|
+| **Returns** | true if the row is disclosable and is now expanded.
|
#### [findRow](#findrow)
| **Signature** | `cp.ui.Table.findRow(rows, names) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Finds the row at the sub-level named in the `names` table and returns it. |
-| **Parameters** | - `rows` - The array of rows to process.
- `names` - The array of names to navigate down
|
-| **Returns** | - The row that was visited, or `nil` if not.
|
+| **Type** | Function |
+| **Description** | Finds the row at the sub-level named in the `names` table and returns it. |
+| **Parameters** | rows - The array of rows to process.names - The array of names to navigate down
|
+| **Returns** | - The row that was visited, or
nil if not.
|
#### [is](#is)
| **Signature** | `cp.ui.Table.is(thing) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the `thing` is a `Table`. |
-| **Parameters** | - `thing` - The thing to check
|
-| **Returns** | - `true` if the thing is a `Table` instance.
|
+| **Type** | Function |
+| **Description** | Checks if the `thing` is a `Table`. |
+| **Parameters** | thing - The thing to check
|
+| **Returns** | true if the thing is a Table instance.
|
#### [matches](#matches)
| **Signature** | `cp.ui.Table.matches(element)` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the element is a valid table. |
-| **Parameters** | - `element` - The element to check.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Checks if the element is a valid table. |
+| **Parameters** | element - The element to check.
|
+| **Returns** | |
#### [matchesContent](#matchescontent)
| **Signature** | `cp.ui.Table.matchesContent(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the `element` is a valid table content element. |
-| **Parameters** | - `element` - The element to check
|
-| **Returns** | - `true` if the element is a valid content element.
|
+| **Type** | Function |
+| **Description** | Checks if the `element` is a valid table content element. |
+| **Parameters** | element - The element to check
|
+| **Returns** | true if the element is a valid content element.
|
#### [visitRow](#visitrow)
| **Signature** | `cp.ui.Table.visitRow(rows, names) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Selects the row at the sub-level named in the `names` table. |
-| **Parameters** | - `rows` - The array of rows to process.
- `names` - The array of names to navigate down
|
-| **Returns** | - The row that was visited, or `nil` if not.
|
+| **Type** | Function |
+| **Description** | Selects the row at the sub-level named in the `names` table. |
+| **Parameters** | rows - The array of rows to process.names - The array of names to navigate down
|
+| **Returns** | - The row that was visited, or
nil if not.
|
### Constructors
-#### [new](#new)
-| **Signature** | `cp.ui.Table.new(parent, finder) -> Table` |
+#### [Table](#table)
+| **Signature** | `cp.ui.Table(parent, uiFinder) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new Table. |
+| **Parameters** | parent - The parent object.uiFinder - A function or cp.prop which will return the axuielement that this table represents.
|
+| **Returns** | |
+
+### Fields
+
+#### [contentUI](#contentui)
+| **Signature** | `cp.ui.Table.contentUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns the `axuielement` that contains the actual rows. |
+
+#### [horizontalScrollBarUI](#horizontalscrollbarui)
+| **Signature** | `cp.ui.Table.horizontalScrollBarUI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new Table. |
-| **Parameters** | - `parent` - The parent object.
- `finder` - A function which will return the `axuielement` that this table represents.
|
+| **Type** | Field |
+| **Description** | The horizontal scroll bar UI element, if present. |
+
+#### [isFocused](#isfocused)
+| **Signature** | `cp.ui.Table.isFocused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if the table is focused by the user. |
+
+#### [verticalScrollBarUI](#verticalscrollbarui)
+| **Signature** | `cp.ui.Table.verticalScrollBarUI ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The vertical scroll bar UI element, if present. |
### Methods
#### [columnsUI](#columnsui)
| **Signature** | `cp.ui.Table:columnsUI() -> table of axuielements | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Return a list of column headers, if present. |
+| **Type** | Method |
+| **Description** | Return a list of column headers, if present. |
| **Parameters** | |
-| **Returns** | - Table of column headers. If the table is visible but no column headers are defined, an empty table is returned. If it's not visible, `nil` is returned.
|
+| **Returns** | - Table of column headers. If the table is visible but no column headers are defined, an empty table is returned. If it's not visible,
nil is returned.
|
-#### [horizontalScrollBarUI](#horizontalscrollbarui)
-| **Signature** | `cp.ui.Table:horizontalScrollBarUI() -> axuielement | nil` |
+#### [deselectAll](#deselectall)
+| **Signature** | `cp.ui.Table:deselectAll(rowUI) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the horizontal scroll bar UI element, if present. |
-| **Parameters** | |
-| **Returns** | - The UI element, or `nil`.
|
+| **Type** | Method |
+| **Description** | Deselects the specified rows. If `rowsUI` is `nil`, then all rows will be deselected. |
+| **Parameters** | - rowUI - A table of
hs._asm.axuielement objects for the rows you want to deselect.
|
-#### [isFocused](#isfocused)
-| **Signature** | `cp.ui.Table:isFocused() -> boolean` |
+#### [deselectRow](#deselectrow)
+| **Signature** | `cp.ui.Table:deselectRow(rowUI) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks if the table is focused by the user. |
-| **Parameters** | |
-| **Returns** | - `true` if the element is focused.
|
+| **Type** | Method |
+| **Description** | Deselect a specific row. |
+| **Parameters** | - rowUI - The
hs._asm.axuielement object of the row you want to deselect.
|
-#### [isShowing](#isshowing)
-| **Signature** | `cp.ui.Table:isShowing() -> boolean` |
+#### [deselectRowAt](#deselectrowat)
+| **Signature** | `cp.ui.Table:deselectRowAt(index) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Checks if the table is visible. |
-| **Parameters** | |
-| **Returns** | - `true` if the element is visible.
|
+| **Type** | Method |
+| **Description** | Deselects a row at a specific index. |
+| **Parameters** | - index - The index of the row you wish to deselect.
|
-#### [parent](#parent)
-| **Signature** | `cp.ui.Table:parent() -> value` |
+#### [findCellUI](#findcellui)
+| **Signature** | `cp.ui.Table:findCellUI(rowNumber, columnId) -> `hs._asm.axuielement` | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | The table's parent, as provided in the constructor. |
-| **Parameters** | |
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Finds a specific Cell UI. |
+| **Parameters** | - rowNumber - The row number.
- columnId - The Column ID.
|
+| **Returns** | - A
hs._asm.axuielement object for the cell, or nil if the cell cannot be found.
|
+
+#### [findColumnIndex](#findcolumnindex)
+| **Signature** | `cp.ui.Table:findColumnIndex(id) -> number | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Finds the Column Index based on an `AXIdentifier` ID. |
+| **Parameters** | - id - The
AXIdentifier of the column index you want to find.
|
+| **Returns** | - A column index as a number, or
nil if no index can be found.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.Table:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Table layout. |
+| **Parameters** | - layout - A table containing the Table layout settings - created using
cp.ui.Table:saveLayout().
|
+| **Returns** | |
#### [rowsUI](#rowsui)
| **Signature** | `cp.ui.Table:rowsUI([filterFn]) -> table of axuielements | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the list of rows in the table. An optional filter function may be provided. |
-| **Parameters** | - `filterFn` - An optional function that will be called to check if individual rows should be included. If not provided, all rows are returned.
|
-| **Returns** | - Table of rows. If the table is visible but no rows match, it will be an empty table, otherwise it will be `nil`.
|
+| **Type** | Method |
+| **Description** | Returns the list of rows in the table. An optional filter function may be provided. |
+| **Parameters** | filterFn - An optional function that will be called to check if individual rows should be included. If not provided, all rows are returned.
|
+| **Returns** | - Table of rows. If the table is visible but no rows match, it will be an empty table, otherwise it will be
nil.
|
-#### [topRowsUI](#toprowsui)
-| **Signature** | `cp.ui.Table:topRowsUI(filterFn) -> table of axuielements | nil` |
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.Table:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Table layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Table Layout.
|
+
+#### [selectAll](#selectall)
+| **Signature** | `cp.ui.Table:selectAll(rowUI) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a list of top-level rows in the table. An optional filter function may be provided. |
-| **Parameters** | - `filterFn` - An optional function that will be called to check if individual rows should be included. If not provided, all rows are returned.
|
-| **Returns** | - Table of rows. If the table is visible but no rows match, it will be an empty table, otherwise it will be `nil`.
|
+| **Type** | Method |
+| **Description** | Selects the specified rows. If `rowsUI` is `nil`, then all rows will be selected. |
+| **Parameters** | - rowUI - A table of
hs._asm.axuielement objects for the rows you want to select.
|
-#### [UI](#ui)
-| **Signature** | `cp.ui.Table:UI() -> axuielement | nil` |
+#### [selectedRowsUI](#selectedrowsui)
+| **Signature** | `cp.ui.Table:selectedRowsUI() -> table of axuielements | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the `axuielement` that contains the actual rows. |
+| **Type** | Method |
+| **Description** | Return a table of selected row UIs. |
| **Parameters** | |
-| **Returns** | - The content UI element, or `nil`.
|
+| **Returns** | - Table of
hs._asm.axuielement objects, or nil if none could be found.
|
+
+#### [selectRow](#selectrow)
+| **Signature** | `cp.ui.Table:selectRow(rowUI) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Select a specific row. |
+| **Parameters** | - rowUI - The
hs._asm.axuielement object of the row you want to select.
|
-#### [uncached](#uncached)
-| **Signature** | `cp.ui.Table:uncached() -> Table` |
+#### [selectRowAt](#selectrowat)
+| **Signature** | `cp.ui.Table:selectRowAt(index) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Calling this will force the table to look up the `axuielement` on demand, rather than caching the result. |
+| **Type** | Method |
+| **Description** | Select a row at a specific index. |
+| **Parameters** | - index - The index of the row you wish to select.
|
+
+#### [showRow](#showrow)
+| **Signature** | `cp.ui.Table:showRow(rowUI) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows a specific row. |
+| **Parameters** | - rowUI - The
hs._asm.axuielement object of the row you want to show.
|
+
+#### [showRowAt](#showrowat)
+| **Signature** | `cp.ui.Table:showRowAt(index) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Shows a row at a specific index. |
+| **Parameters** | - index - The index of the row you wish to show.
|
+
+#### [toCSV](#tocsv)
+| **Signature** | `cp.ui.Table:toCSV() -> string | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the contents of the table and formats it as a CSV string. |
| **Parameters** | |
+| **Returns** | - A string or
nil if an error occurs.
|
-#### [verticalScrollBarUI](#verticalscrollbarui)
-| **Signature** | `cp.ui.Table:verticalScrollBarUI() -> axuielement | nil` |
+#### [topRowsUI](#toprowsui)
+| **Signature** | `cp.ui.Table:topRowsUI(filterFn) -> table of axuielements | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a list of top-level rows in the table. An optional filter function may be provided. |
+| **Parameters** | filterFn - An optional function that will be called to check if individual rows should be included. If not provided, all rows are returned.
|
+| **Returns** | - Table of rows. If the table is visible but no rows match, it will be an empty table, otherwise it will be
nil.
|
+
+#### [viewFrame](#viewframe)
+| **Signature** | `cp.ui.Table:viewFrame() -> hs.geometry rect` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Finds the vertical scroll bar UI element, if present. |
+| **Type** | Method |
+| **Description** | Returns the Table frame. |
| **Parameters** | |
-| **Returns** | - The UI element, or `nil`.
|
diff --git a/api/cp/cp.ui.TextArea.md b/api/cp/cp.ui.TextArea.md
new file mode 100644
index 0000000..e3a4741
--- /dev/null
+++ b/api/cp/cp.ui.TextArea.md
@@ -0,0 +1,71 @@
+# [docs](index.md) » cp.ui.TextArea
+---
+
+UI Text Area.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [TextArea](#textarea)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [focused](#focused)
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [append](#append)
+ * [prepend](#prepend)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.TextArea.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check.
|
+| **Returns** | true if matches otherwise false
|
+
+### Constructors
+
+#### [TextArea](#textarea)
+| **Signature** | `cp.ui.TextArea(parent, uiFinder) -> TextArea` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `TextArea` instance. |
+| **Parameters** | - parent - The parent object.
- uiFinder - A function which will return the
hs._asm.axuielement when available.
|
+| **Returns** | |
+
+### Fields
+
+#### [focused](#focused)
+| **Signature** | `cp.ui.TextArea.focused ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Whether or not the Text Area if focused. |
+
+#### [value](#value)
+| **Signature** | `cp.ui.TextArea.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current value of the text field. |
+
+### Methods
+
+#### [append](#append)
+| **Signature** | `cp.ui.TextArea:append(moreText) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Appends `moreText` to the end of the current value, returning the combined text value. If no text is currently set, `moreText` becomes the value. |
+| **Parameters** | - moreText - The text to add.
|
+| **Returns** | - The combined
string value.
|
+
+#### [prepend](#prepend)
+| **Signature** | `cp.ui.TextArea:prepend(moreText) -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Appends `moreText` to the beginning of the current value, returning the combined text value. If no text is currently set, `moreText` becomes the value. |
+| **Parameters** | - moreText - The text to add.
|
+| **Returns** | - The combined
string value.
|
+
diff --git a/api/cp/cp.ui.TextField.md b/api/cp/cp.ui.TextField.md
index 487b96a..f005b8a 100644
--- a/api/cp/cp.ui.TextField.md
+++ b/api/cp/cp.ui.TextField.md
@@ -5,15 +5,105 @@ Text Field Module.
## API Overview
* Functions - API calls offered directly by the extension
- * [new](#new)
+ * [matches](#matches)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [value](#value)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [clear](#clear)
+ * [doConfirm](#doconfirm)
+ * [doFocus](#dofocus)
+ * [forceFocus](#forcefocus)
+ * [getValue](#getvalue)
+ * [loadLayout](#loadlayout)
+ * [saveLayout](#savelayout)
+ * [setValue](#setvalue)
+ * [TextField](#textfield)
## API Documentation
### Functions
-#### [new](#new)
-| **Signature** | `cp.ui.TextField:new(axuielement, function) -> TextField` |
+#### [matches](#matches)
+| **Signature** | `cp.ui.TextField.matches(element[, subrole]) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a new TextField |
+| **Type** | Function |
+| **Description** | Checks to see if an element matches what we think it should be. |
+| **Parameters** | - element - An
axuielementObject to check. - subrole - (optional) If provided, the field must have the specified subrole.
|
+| **Returns** | true if matches otherwise false
|
+
+### Fields
+
+#### [value](#value)
+| **Signature** | `cp.ui.TextField.value ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The current value of the text field. |
+
+### Methods
+
+#### [clear](#clear)
+| **Signature** | `cp.ui.TextField:clear() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Clears the value of a Text Field. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [doConfirm](#doconfirm)
+| **Signature** | `cp.ui.TextField:doConfirm() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will confirm the current text value. |
+
+#### [doFocus](#dofocus)
+| **Signature** | `cp.ui.TextField:doFocus() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | A [Statement](cp.rx.go.Statement.md) that will attempt to focus on the current `TextField`. |
+
+#### [forceFocus](#forcefocus)
+| **Signature** | `cp.ui.TextField:forceFocus()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Configures the TextField to force a focus on the field before editing. |
+
+#### [getValue](#getvalue)
+| **Signature** | `cp.ui.TextField:getValue() -> string` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Gets the value of the Text Field. |
+| **Parameters** | |
+| **Returns** | - The value of the Text Field as a string.
|
+
+#### [loadLayout](#loadlayout)
+| **Signature** | `cp.ui.TextField:loadLayout(layout) -> none` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Loads a Text Field layout. |
+| **Parameters** | - layout - A table containing the Text Field layout settings - created using
cp.ui.TextField:saveLayout().
|
+| **Returns** | |
+
+#### [saveLayout](#savelayout)
+| **Signature** | `cp.ui.TextField:saveLayout() -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Saves the current Text Field layout to a table. |
+| **Parameters** | |
+| **Returns** | - A table containing the current Text Field Layout.
|
+
+#### [setValue](#setvalue)
+| **Signature** | `cp.ui.TextField:setValue(value) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Sets the value of the Text Field. |
+| **Parameters** | - value - The value you want to set the Text Field to as a string.
|
+| **Returns** | |
+
+#### [TextField](#textfield)
+| **Signature** | `cp.ui.TextField(parent, uiFinder[, convertFn]) -> TextField` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Creates a new TextField. They have a parent and a finder function. |
+| **Parameters** | - parent - The parent object.
- uiFinder - The function will return the
axuielement for the TextField. - getConvertFn - (optional) If provided, will be passed the
string value when returning. - setConvertFn - (optional) If provided, will be passed the
number value when setting.
|
+| **Returns** | |
diff --git a/api/cp/cp.ui.Toolbar.md b/api/cp/cp.ui.Toolbar.md
new file mode 100644
index 0000000..807acd3
--- /dev/null
+++ b/api/cp/cp.ui.Toolbar.md
@@ -0,0 +1,62 @@
+# [docs](index.md) » cp.ui.Toolbar
+---
+
+Toolbar Module.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [matches](#matches)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [Toolbar](#toolbar)
+* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [overflowButton](#overflowbutton)
+ * [selectedTitle](#selectedtitle)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [doSelect](#doselect)
+
+## API Documentation
+
+### Functions
+
+#### [matches](#matches)
+| **Signature** | `cp.ui.Toolbar.matches(element) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `element` is a `Button`, returning `true` if so. |
+| **Parameters** | - element - The
hs._asm.axuielement to check.
|
+| **Returns** | true if the element is a Button, or false if not.
|
+
+### Constructors
+
+#### [Toolbar](#toolbar)
+| **Signature** | `cp.ui.Toolbar(parent, uiFinder) -> cp.ui.Toolbar` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `Toolbar` instance, given the specified `parent` and `uiFinder` |
+| **Parameters** | - parent - The parent object.
- uiFinder - The
cp.prop or function that finds the hs._asm.axuielement that represents the Toolbar.
|
+| **Returns** | - The new
Toolbar instance.
|
+
+### Fields
+
+#### [overflowButton](#overflowbutton)
+| **Signature** | `cp.ui.Toolbar.overflowButton ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The "overflow" button which appears if there are more toolbar items |
+
+#### [selectedTitle](#selectedtitle)
+| **Signature** | `cp.ui.Toolbar.selectedTitle ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The title of the first selected item, if available. |
+
+### Methods
+
+#### [doSelect](#doselect)
+| **Signature** | `cp.ui.Toolbar:doSelect(title) -> Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `Statement` that will select the toolbar item with the specified title. |
+| **Parameters** | - title - The title to select, if present.
|
+| **Returns** | - A
Statement that when executed returns true if the item was found and selected, otherwise false.
|
+
diff --git a/api/cp/cp.ui.Window.md b/api/cp/cp.ui.Window.md
index a86a00f..b9d724f 100644
--- a/api/cp/cp.ui.Window.md
+++ b/api/cp/cp.ui.Window.md
@@ -5,114 +5,181 @@ A Window UI element.
## API Overview
* Functions - API calls offered directly by the extension
+ * [findSectionUI](#findsectionui)
* [matches](#matches)
* Constructors - API calls which return an object, typically one that offers API methods
- * [new](#new)
+ * [Window](#window)
* Fields - Variables which can only be accessed from an object returned by a constructor
+ * [alert](#alert)
* [exists](#exists)
* [focused](#focused)
* [frame](#frame)
- * [fullScreen](#fullscreen)
* [hsWindow](#hswindow)
* [id](#id)
+ * [isFullScreen](#isfullscreen)
+ * [isShowing](#isshowing)
* [minimized](#minimized)
* [UI](#ui)
* [visible](#visible)
* Methods - API calls which can only be made on an object returned by a constructor
* [close](#close)
+ * [doClose](#doclose)
+ * [doFocus](#dofocus)
+ * [findSectionUI](#findsectionui)
* [focus](#focus)
+ * [notifier](#notifier)
+ * [snapshot](#snapshot)
## API Documentation
### Functions
+#### [findSectionUI](#findsectionui)
+| **Signature** | `cp.ui.Window.findSectionUI(windowUI, sectionID) -> hs._asm.axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds the `axuielement` for the specified `sectionID`, if present in the provided `axuielement` `windowUI`. |
+| **Parameters** | - windowUI - The
AXWindow axuielement to search in. - sectionID - The string value for the
SectionUniqueID.
|
+| **Returns** | - The matching
axuielement, or nil.
|
+
#### [matches](#matches)
| **Signature** | `cp.ui.Window.matches(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the provided element is a valid window. |
+| **Type** | Function |
+| **Description** | Checks if the provided element is a valid window. |
### Constructors
-#### [new](#new)
-| **Signature** | `cp.ui.Window:new(finderFn) -> Window` |
+#### [Window](#window)
+| **Signature** | `cp.ui.Window(cpApp, uiProp) -> Window` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Constructor |
-| **Description** | Creates a new Window |
-| **Parameters** | - `finderFn` - a function which will provide the `axuielement` for the window to work with.
|
-| **Returns** | |
+| **Type** | Constructor |
+| **Description** | Creates a new Window |
+| **Parameters** | cpApp - a cp.app for the application the Window belongs to.uiProp - a cp.prop that returns the hs._asm.axuielement for the window.
|
+| **Returns** | |
### Fields
+#### [alert](#alert)
+| **Signature** | `cp.ui.Window.alert ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Provides access to any 'Alert' windows on the Window. |
+
#### [exists](#exists)
| **Signature** | `cp.ui.Window.exists ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Returns `true` if the window exists. It may not be visible. |
+| **Type** | Field |
+| **Description** | Returns `true` if the window exists. It may not be visible. |
#### [focused](#focused)
| **Signature** | `cp.ui.Window.focused ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Is `true` if the window has mouse/keyboard focused. |
+| **Type** | Field |
+| **Description** | Is `true` if the window has mouse/keyboard focused. |
#### [frame](#frame)
| **Signature** | `cp.ui.Window.frame ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The `hs.geometry` rect value describing the window's position. |
-
-#### [fullScreen](#fullscreen)
-| **Signature** | `cp.ui.Window.fullScreen ` |
-| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Returns `true` if the window is full-screen. |
+| **Type** | Field |
+| **Description** | The `hs.geometry` rect value describing the window's position. |
#### [hsWindow](#hswindow)
| **Signature** | `cp.ui.Window.hsWindow ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The `hs.window` instance for the window, or `nil` if it can't be found. |
+| **Type** | Field |
+| **Description** | The `hs.window` instance for the window, or `nil` if it can't be found. |
#### [id](#id)
-| **Signature** | `cp.ui.Window.id ` |
+| **Signature** | `cp.ui.Window.id ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | The window title, or `nil` if the window is not currently visible. |
+
+#### [isFullScreen](#isfullscreen)
+| **Signature** | `cp.ui.Window.isFullScreen ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Field |
+| **Description** | Returns `true` if the window is full-screen. |
+
+#### [isShowing](#isshowing)
+| **Signature** | `cp.ui.Window.isShowing ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | The unique ID for the window. |
+| **Type** | Field |
+| **Description** | Indicates if the `Window` is currently showing on screen. |
#### [minimized](#minimized)
| **Signature** | `cp.ui.Window.minimized ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Returns `true` if the window exists and is minimised. |
+| **Type** | Field |
+| **Description** | Returns `true` if the window exists and is minimised. |
#### [UI](#ui)
-| **Signature** | `cp.ui.Window.UI ` |
+| **Signature** | `cp.ui.Window.UI ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Returns the `axuielement` UI for the window, or `nil` if it can't be found. |
+| **Type** | Field |
+| **Description** | The UI `axuielement` for the Window. |
#### [visible](#visible)
| **Signature** | `cp.ui.Window.visible ` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Field |
-| **Description** | Returns `true` if the window is visible on a screen. |
+| **Type** | Field |
+| **Description** | Returns `true` if the window is visible on a screen. |
### Methods
#### [close](#close)
-| **Signature** | `cp.ui.Window.close() -> boolean` |
+| **Signature** | `cp.ui.Window:close() -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Attempts to close the window. |
-| **Parameters** | |
-| **Returns** | - * `true` if the window was successfully closed.
|
+| **Type** | Method |
+| **Description** | Attempts to close the window. |
+| **Parameters** | |
+| **Returns** | true if the window was successfully closed.
|
+
+#### [doClose](#doclose)
+| **Signature** | `cp.ui.Window:doClose() -> cp.rx.go.Statement ` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) that will attempt to close the window, if it is visible. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute, resolving to true if the window is closed successfully, or false if not.
|
+
+#### [doFocus](#dofocus)
+| **Signature** | `cp.ui.Window:doFocus() -> cp.rx.go.Statement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a [Statement](cp.rx.go.Statement.md) will attempt to focus on the window, if it is visible. |
+| **Parameters** | |
+| **Returns** | - The
Statement to execute, which resolves to true if the window was successfully focused, or false if not.
|
+
+#### [findSectionUI](#findsectionui)
+| **Signature** | `cp.ui.Window:findSectionUI(sectionID) -> hs._asm.axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Looks for th section with the specified `SectionUniqueID` value and returns the matching `axuielement` value. |
+| **Parameters** | - sectionID - The string for the section ID.
|
+| **Returns** | - The matching
axuielement, or nil.
|
#### [focus](#focus)
-| **Signature** | `cp.ui.Window.focus() -> boolean` |
+| **Signature** | `cp.ui.Window:focus() -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Attempts to focus the window. |
+| **Parameters** | |
+| **Returns** | true if the window was successfully focused.
|
+
+#### [notifier](#notifier)
+| **Signature** | `cp.ui.Window:notifier() -> cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns a `notifier` that is tracking the application UI element. It has already been started. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [snapshot](#snapshot)
+| **Signature** | `cp.ui.Window:snapshot([path]) -> hs.image | nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Attempts to focus the window. |
-| **Parameters** | |
-| **Returns** | - * `true` if the window was successfully focused.
|
+| **Type** | Method |
+| **Description** | Takes a snapshot of the UI in its current state as a PNG and returns it. |
+| **Parameters** | - path - (optional) The path to save the file. Should include the extension (should be
.png).
|
diff --git a/api/cp/cp.ui.axutils.md b/api/cp/cp.ui.axutils.md
index 774730d..6bfbe35 100644
--- a/api/cp/cp.ui.axutils.md
+++ b/api/cp/cp.ui.axutils.md
@@ -1,16 +1,25 @@
# [docs](index.md) » cp.ui.axutils
---
-Utility functions to support `hs._asm.axuielement`
+Utility functions to support `hs._asm.axuielement`.
## API Overview
* Functions - API calls offered directly by the extension
* [cache](#cache)
* [childAtIndex](#childatindex)
+ * [childFromBottom](#childfrombottom)
* [childFromLeft](#childfromleft)
* [childFromRight](#childfromright)
* [childFromTop](#childfromtop)
+ * [childInColumn](#childincolumn)
+ * [childIndex](#childindex)
* [childMatching](#childmatching)
+ * [children](#children)
+ * [childrenAbove](#childrenabove)
+ * [childrenBelow](#childrenbelow)
+ * [childrenInColumn](#childrenincolumn)
+ * [childrenInLine](#childreninline)
+ * [childrenInNextLine](#childreninnextline)
* [childrenMatching](#childrenmatching)
* [childrenWith](#childrenwith)
* [childrenWithRole](#childrenwithrole)
@@ -18,121 +27,325 @@ Utility functions to support `hs._asm.axuielement`
* [childWithDescription](#childwithdescription)
* [childWithID](#childwithid)
* [childWithRole](#childwithrole)
+ * [childWithTitle](#childwithtitle)
+ * [compareBottomToTop](#comparebottomtotop)
+ * [compareLeftToRight](#comparelefttoright)
+ * [compareRightToLeft](#comparerighttoleft)
+ * [compareTopToBottom](#comparetoptobottom)
+ * [hasAttributeValue](#hasattributevalue)
+ * [hasChild](#haschild)
* [isValid](#isvalid)
+ * [prop](#prop)
+ * [role](#role)
+ * [snapshot](#snapshot)
+ * [valueOf](#valueof)
+ * [withAttributeValue](#withattributevalue)
+ * [withRole](#withrole)
+ * [withTitle](#withtitle)
+ * [withValue](#withvalue)
## API Documentation
### Functions
#### [cache](#cache)
-| **Signature** | `cp.ui.axutils.cache(source, key, finderFn, [verifyFn]) -> axuielement` |
+| **Signature** | `cp.ui.axutils.cache(source, key, finderFn[, verifyFn]) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the cached value at the `source[key]` is a valid axuielement. If not |
-| **Parameters** | - source - the table containing the cache
- key - the key the value is cached under
- finderFn - the function which will return the element if not found.
- [verifyFn] - an optional function which will check the cached element to verify it is still valid.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Checks if the cached value at the `source[key]` is a valid axuielement. If not |
+| **Parameters** | - source - the table containing the cache
- key - the key the value is cached under
- finderFn - the function which will return the element if not found.
- [verifyFn] - an optional function which will check the cached element to verify it is still valid.
|
+| **Returns** | |
#### [childAtIndex](#childatindex)
-| **Signature** | `cp.ui.axutils.childAtIndex(element, index, compareFn) -> axuielement` |
+| **Signature** | `cp.ui.axutils.childAtIndex(element, index, compareFn[, matcherFn]) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Searches for the child element which is at number `index` when sorted using the `compareFn`. |
-| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
- compareFn - a function to compare the elements.
|
-| **Returns** | - The child, or `nil` if the index is larger than the number of children.
|
+| **Type** | Function |
+| **Description** | Searches for the child element which is at number `index` when sorted using the `compareFn`. |
+| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
- compareFn - a function to compare the elements.
- matcherFn - an optional function which is passed each child and returns
true if the child should be processed.
|
+| **Returns** | - The child, or
nil if the index is larger than the number of children.
|
+
+#### [childFromBottom](#childfrombottom)
+| **Signature** | `cp.ui.axutils.childFromBottom(element, index) -> axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Searches for the child element which is at number `index` when sorted bottom-to-top. |
+| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
- matcherFn - an optional function which is passed each child and returns
true if the child should be processed.
|
+| **Returns** | - The child, or
nil if the index is larger than the number of children.
|
#### [childFromLeft](#childfromleft)
-| **Signature** | `cp.ui.axutils.childFromLeft(element, index) -> axuielement` |
+| **Signature** | `cp.ui.axutils.childFromLeft(element, index[, matcherFn]) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Searches for the child element which is at number `index` when sorted left-to-right. |
-| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
|
-| **Returns** | - The child, or `nil` if the index is larger than the number of children.
|
+| **Type** | Function |
+| **Description** | Searches for the child element which is at number `index` when sorted left-to-right. |
+| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
- matcherFn - an optional function which is passed each child and returns
true if the child should be processed.
|
+| **Returns** | - The child, or
nil if the index is larger than the number of children.
|
#### [childFromRight](#childfromright)
-| **Signature** | `cp.ui.axutils.childFromRight(element, index) -> axuielement` |
+| **Signature** | `cp.ui.axutils.childFromRight(element, index[, matcherFn]) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Searches for the child element which is at number `index` when sorted right-to-left. |
-| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
|
-| **Returns** | - The child, or `nil` if the index is larger than the number of children.
|
+| **Type** | Function |
+| **Description** | Searches for the child element which is at number `index` when sorted right-to-left. |
+| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
- matcherFn - an optional function which is passed each child and returns
true if the child should be processed.
|
+| **Returns** | - The child, or
nil if the index is larger than the number of children.
|
#### [childFromTop](#childfromtop)
-| **Signature** | `cp.ui.axutils.childFromTop(element, index) -> axuielement` |
+| **Signature** | `cp.ui.axutils.childFromTop(element, index[, matcherFn]) -> axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Searches for the child element which is at number `index` when sorted top-to-bottom. |
+| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
- matcherFn - an optional function which is passed each child and returns
true if the child should be processed.
|
+| **Returns** | - The child, or
nil if the index is larger than the number of children.
|
+
+#### [childInColumn](#childincolumn)
+| **Signature** | `cp.ui.axutils.childInColumn(element, role, startIndex, childIndex) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds the children for an element, then checks to see if they match the supplied |
+| **Parameters** | - element - The element to retrieve the children from.
- role - The required role as a string.
- startIndex - A number which defines the index of the first element to use.
- childIndex - A number which defines the index of the element to return.
|
+| **Returns** | - The
axuielement if it matches, otherwise nil.
|
+
+#### [childIndex](#childindex)
+| **Signature** | `cp.ui.axutils.childIndex(element) -> number or nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Searches for the child element which is at number `index` when sorted top-to-botom. |
-| **Parameters** | - element - the axuielement or array of axuielements
- index - the index number of the child to find.
|
-| **Returns** | - The child, or `nil` if the index is larger than the number of children.
|
+| **Type** | Function |
+| **Description** | Finds the index of the specified child element, if it is present. If not, `nil` is returned. |
+| **Parameters** | - element - The
axuielement to find the index of.
|
+| **Returns** | - The index (
1 or higher) of the element, or nil if it was not found.
|
#### [childMatching](#childmatching)
-| **Signature** | `cp.ui.axutils.childMatching(element, matcherFn) -> axuielement` |
+| **Signature** | `cp.ui.axutils.childMatching(element, matcherFn[, index]) -> axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | This searches for the first child of the specified element for which the provided function returns `true`. |
+| **Parameters** | - element - the axuielement
- matcherFn - the function which checks if the child matches the requirements.
- index - the number of matching child to return. Defaults to
1.
|
+| **Returns** | - The first matching child, or nil if none was found
|
+
+#### [children](#children)
+| **Signature** | `cp.ui.axutils.children(element[, compareFn]) -> table` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds the children for the element. If it is an `hs._asm.axuielement`, it will |
+| **Parameters** | - element - The element to retrieve the children of.
- compareFn - Optional function to use to sort the order of the returned children.
|
+| **Returns** | |
+
+#### [childrenAbove](#childrenabove)
+| **Signature** | `cp.ui.axutils.childrenAbove(element, bottomElement) -> table of axuielement or nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds the list of `axuielement` children from the `element` which are above the specified `bottomElement`. |
+| **Parameters** | - element - The
axuielement to find the children of. - topElement - The
axuielement that the other children must be above.
|
+| **Returns** | - The table of
axuielements that are above, or nil if the element is not available.
|
+
+#### [childrenBelow](#childrenbelow)
+| **Signature** | `cp.ui.axutils.childrenBelow(element, topElement) -> table of axuielement or nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for the first child of the specified element for which the provided function returns `true`. |
-| **Parameters** | - element - the axuielement
- matcherFn - the function which checks if the child matches the requirements.
|
-| **Returns** | - The first matching child, or nil if none was found
|
+| **Type** | Function |
+| **Description** | Finds the list of `axuielement` children from the `element` which are below the specified `topElement`. |
+| **Parameters** | - element - The
axuielement to find the children of. - topElement - The
axuielement that the other children must be below.
|
+| **Returns** | - The table of
axuielements that are below, or nil if the element is not available.
|
+
+#### [childrenInColumn](#childrenincolumn)
+| **Signature** | `cp.ui.axutils.childrenInColumn(element, role, startIndex) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Finds the children for an element, then checks to see if they match the supplied |
+| **Parameters** | - element - The element to retrieve the children from.
- role - The required role as a string.
- startIndex - A number which defines the index of the first element to use.
|
+| **Returns** | - The table of
axuielement objects, otherwise nil.
|
+
+#### [childrenInLine](#childreninline)
+| **Signature** | `cp.ui.axutils.childrenInLine(element) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets a table of children that are all in the same family and line as the |
+| **Parameters** | - element - The base element.
|
+| **Returns** | - The table of
axuielement objects, otherwise nil.
|
+
+#### [childrenInNextLine](#childreninnextline)
+| **Signature** | `cp.ui.axutils.childrenInNextLine(element) -> table | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Gets a table of children that are in the next line in relation to the supplied |
+| **Parameters** | - element - The base element.
|
+| **Returns** | - The table of
axuielement objects, otherwise nil.
|
#### [childrenMatching](#childrenmatching)
| **Signature** | `cp.ui.axutils.childrenMatching(element, matcherFn) -> { axuielement }` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for all children of the specified element for which the provided |
-| **Parameters** | - element - the axuielement
- matcherFn - the function which checks if the child matches the requirements.
|
-| **Returns** | - All matching children, or `nil` if none was found
|
+| **Type** | Function |
+| **Description** | This searches for all children of the specified element for which the provided |
+| **Parameters** | - element - the axuielement
- matcherFn - the function which checks if the child matches the requirements.
|
+| **Returns** | - All matching children, or
nil if none was found
|
#### [childrenWith](#childrenwith)
| **Signature** | `cp.ui.axutils.childrenWith(element, name, value) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for all children of the specified element which has an attribute with the matching name and value. |
-| **Parameters** | - element - the axuielement
- name - the name of the attribute
- value - the value of the attribute
|
-| **Returns** | - All matching children, or `nil` if none was found
|
+| **Type** | Function |
+| **Description** | This searches for all children of the specified element which has an attribute with the matching name and value. |
+| **Parameters** | - element - the axuielement
- name - the name of the attribute
- value - the value of the attribute
|
+| **Returns** | - All matching children, or
nil if none was found
|
#### [childrenWithRole](#childrenwithrole)
| **Signature** | `cp.ui.axutils.childrenWithRole(element, value) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for all children of the specified element which has an `AXRole` attribute with the matching value. |
-| **Parameters** | - element - the axuielement
- value - the value of the attribute
|
-| **Returns** | - All matching children, or `nil` if none was found
|
+| **Type** | Function |
+| **Description** | This searches for all children of the specified element which has an `AXRole` attribute with the matching value. |
+| **Parameters** | - element - the axuielement
- value - the value of the attribute
|
+| **Returns** | - All matching children, or
nil if none was found
|
#### [childWith](#childwith)
| **Signature** | `cp.ui.axutils.childWith(element, name, value) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for the first child of the specified element which has an attribute with the matching name and value. |
-| **Parameters** | - element - the axuielement
- name - the name of the attribute
- value - the value of the attribute
|
-| **Returns** | - The first matching child, or nil if none was found
|
+| **Type** | Function |
+| **Description** | This searches for the first child of the specified element which has an attribute with the matching name and value. |
+| **Parameters** | - element - the axuielement
- name - the name of the attribute
- value - the value of the attribute
|
+| **Returns** | - The first matching child, or nil if none was found
|
#### [childWithDescription](#childwithdescription)
| **Signature** | `cp.ui.axutils.childWithDescription(element, value) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for the first child of the specified element which has `AXDescription` with the specified value. |
-| **Parameters** | - element - the axuielement
- value - the value
|
-| **Returns** | - The first matching child, or `nil` if none was found
|
+| **Type** | Function |
+| **Description** | This searches for the first child of the specified element which has `AXDescription` with the specified value. |
+| **Parameters** | - element - the axuielement
- value - the value
|
+| **Returns** | - The first matching child, or
nil if none was found
|
#### [childWithID](#childwithid)
| **Signature** | `cp.ui.axutils.childWithID(element, value) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for the first child of the specified element which has `AXIdentifier` with the specified value. |
-| **Parameters** | - element - the axuielement
- value - the value
|
-| **Returns** | - The first matching child, or `nil` if none was found
|
+| **Type** | Function |
+| **Description** | This searches for the first child of the specified element which has `AXIdentifier` with the specified value. |
+| **Parameters** | - element - the axuielement
- value - the value
|
+| **Returns** | - The first matching child, or
nil if none was found
|
#### [childWithRole](#childwithrole)
| **Signature** | `cp.ui.axutils.childWithRole(element, value) -> axuielement` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | This searches for the first child of the specified element which has `AXRole` with the specified value. |
-| **Parameters** | - element - the axuielement
- value - the value
|
-| **Returns** | - The first matching child, or `nil` if none was found
|
+| **Type** | Function |
+| **Description** | This searches for the first child of the specified element which has `AXRole` with the specified value. |
+| **Parameters** | - element - the axuielement
- value - the value
|
+| **Returns** | - The first matching child, or
nil if none was found
|
+
+#### [childWithTitle](#childwithtitle)
+| **Signature** | `cp.ui.axutils.childWithTitle(element, value) -> axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | This searches for the first child of the specified element which has `AXTitle` with the specified value. |
+| **Parameters** | - element - the axuielement
- value - the value
|
+| **Returns** | - The first matching child, or
nil if none was found
|
+
+#### [compareBottomToTop](#comparebottomtotop)
+| **Signature** | `cp.ui.axutils.compareBottomToTop(a, b) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns `true` if element `a` is below element `b`. May be used with `table.sort`. |
+| **Returns** | |
+
+#### [compareLeftToRight](#comparelefttoright)
+| **Signature** | `cp.ui.axutils.compareLeftToRight(a, b) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns `true` if element `a` is left of element `b`. May be used with `table.sort`. |
+| **Returns** | |
+
+#### [compareRightToLeft](#comparerighttoleft)
+| **Signature** | `cp.ui.axutils.compareRightToLeft(a, b) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns `true` if element `a` is right of element `b`. May be used with `table.sort`. |
+| **Returns** | |
+
+#### [compareTopToBottom](#comparetoptobottom)
+| **Signature** | `cp.ui.axutils.compareTopToBottom(a, b) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns `true` if element `a` is above element `b`. May be used with `table.sort`. |
+| **Returns** | |
+
+#### [hasAttributeValue](#hasattributevalue)
+| **Signature** | `cp.ui.axutils.hasAttributeValue(element, name, value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks to see if an element has a specific value. |
+| **Parameters** | - element - the
axuielement - name - the name of the attribute
- value - the value of the attribute
|
+| **Returns** | true if the element has the supplied attribute value, otherwise false.
|
+
+#### [hasChild](#haschild)
+| **Signature** | `cp.ui.axutils.hasChild(element, matcherFn) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the axuielement has a child that passes the `matcherFn`. |
+| **Parameters** | - element - the
axuielement to check. - matcherFn - the
function that accepts an axuielement and returns a boolean
|
+| **Returns** | true if any child matches, otherwise false.
|
#### [isValid](#isvalid)
| **Signature** | `cp.ui.axutils.isValid(element) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Checks if the axuilelement is still valid - that is, still active in the UI. |
-| **Parameters** | - element - the axuielement
|
-| **Returns** | - `true` if the element is valid.
|
+| **Type** | Function |
+| **Description** | Checks if the axuilelement is still valid - that is, still active in the UI. |
+| **Parameters** | - element - the axuielement
|
+| **Returns** | true if the element is valid.
|
+
+#### [prop](#prop)
+| **Signature** | `cp.ui.axutils.prop(uiFinder, attributeName[, settable]) -> cp.prop` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Creates a new `cp.prop` which will find the `hs._asm.axuielement` via the `uiFinder` and |
+| **Parameters** | - uiFinder - the
cp.prop or function which will retrieve the current hs._asm.axuielement. - attributeName - the
AX atrribute name the property links to. - settable - Defaults to
false. If true, the property will also be settable.
|
+| **Returns** | - The
cp.prop for the attribute.
|
+| **Notes** | - If the
uiFinder is a cp.prop, it will be monitored for changes, making the resulting prop "live".
|
+
+#### [role](#role)
+| **Signature** | `cp.ui.axutils.match.role(roleName) -> function` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns a `match` function that will return true if the `axuielement` has the specified `AXRole`. |
+| **Parameters** | - roleName - The role to check for.
|
+| **Returns** | function(element) -> boolean that checks the AXRole is roleName
|
+
+#### [snapshot](#snapshot)
+| **Signature** | `cp.ui.axutils.snapshot(element[, filename]) -> hs.image` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Takes a snapshot of the specified `axuielement` and returns it. |
+| **Parameters** | - element - The
axuielement to snap. - filename - (optional) The path to save the image as a PNG file.
- elementFrame - (optional) The hs.geometry frame of what you want to capture
|
+| **Returns** | - An
hs.image file, or nil if the element could not be snapped.
|
+
+#### [valueOf](#valueof)
+| **Signature** | `cp.ui.axutils.valueOf(element, name[, default]) -> anything` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the named `AX` attribute value, or the `default` if it is empty. |
+| **Parameters** | - element - the
axuielement to retrieve the attribute value for. - attribute - The attribute name (e.g. "AXValue")
- default - (optional) if provided, this will be returned if the attribute is
nil.
|
+| **Returns** | - The attribute value, or the
default if none is found.
|
+
+#### [withAttributeValue](#withattributevalue)
+| **Signature** | `cp.ui.axutils.withAttributeValue(element, name, value) -> hs._asm.axuielement | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element has an attribute value with the specified `name` and `value`. |
+| **Parameters** | - element - The element to check
- name - The name of the attribute to check
- value - The value of the attribute
|
+| **Returns** | - The
axuielement if it matches, otherwise nil.
|
+
+#### [withRole](#withrole)
+| **Signature** | `cp.ui.axutils.withRole(element, role) -> hs._asm.axuielement | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element has an "AXRole" attribute with the specified `role`. |
+| **Parameters** | - element - The element to check
- role - The required role
|
+| **Returns** | - The
axuielement if it matches, otherwise nil.
|
+
+#### [withTitle](#withtitle)
+| **Signature** | `cp.ui.axutils.withTitle(element, title) -> hs._asm.axuielement | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element has an "AXTitle" attribute with the specified `title`. |
+| **Parameters** | - element - The element to check
- title - The required title
|
+| **Returns** | - The
axuielement if it matches, otherwise nil.
|
+
+#### [withValue](#withvalue)
+| **Signature** | `cp.ui.axutils.withValue(element, value) -> hs._asm.axuielement | nil` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the element has an "AXValue" attribute with the specified `value`. |
+| **Parameters** | - element - The element to check
- value - The required value
|
+| **Returns** | - The
axuielement if it matches, otherwise nil.
|
diff --git a/api/cp/cp.ui.notifier.md b/api/cp/cp.ui.notifier.md
new file mode 100644
index 0000000..a5ff804
--- /dev/null
+++ b/api/cp/cp.ui.notifier.md
@@ -0,0 +1,138 @@
+# [docs](index.md) » cp.ui.notifier
+---
+
+Supports long-lived 'AX' notifiers. Configure the application to watch, the
+function that provides the `axuielement` and then register for the type of
+notification to watch, along with a function that will get triggered.
+
+For example:
+
+```lua
+local notifier = require("cp.ui.notifier")
+local function finder() ... end -- returns the axuielement
+local o = notifier.new("com.apple.FinalCut", finder)
+o:watchFor("AXValueChanged", function(notifier, element, notification, details) ... end)
+o:start()
+```
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [notifiersForBundleID](#notifiersforbundleid)
+* Constructors - API calls which return an object, typically one that offers API methods
+ * [new](#new)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [app](#app)
+ * [bundleID](#bundleid)
+ * [currentElement](#currentelement)
+ * [debugging](#debugging)
+ * [pid](#pid)
+ * [reset](#reset)
+ * [start](#start)
+ * [update](#update)
+ * [watchAll](#watchall)
+ * [watchFor](#watchfor)
+
+## API Documentation
+
+### Functions
+
+#### [notifiersForBundleID](#notifiersforbundleid)
+| **Signature** | `cp.ui.notifier.notifiersForBundleID(bundleID) -> table of cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Returns the list of `cp.ui.notifier` instances that have been created for the specified `Bundle ID`. |
+| **Parameters** | - bundleID - The application Bundle ID being observed. E.g. "com.apple.FinalCut".
|
+| **Returns** | - A table of
cp.ui.notifier instances.
|
+
+### Constructors
+
+#### [new](#new)
+| **Signature** | `cp.ui.notifier.new(bundleID, elementFinderFn) -> cp.ui.notifier` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Constructor |
+| **Description** | Creates a new `cp.ui.notifier` instance with the specified bundle ID and |
+| **Parameters** | - bundleID - The application Bundle ID being observed. E.g. "com.apple.FinalCut".
- elementFinderFn - The function that will return the
axuielement to observe.
|
+| **Returns** | - A new
cp.ui.notifier instance.
|
+
+### Methods
+
+#### [app](#app)
+| **Signature** | `cp.ui.notifier:app() -> hs.application` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the current `hs.application` instance for the app this notifier tracks. |
+| **Parameters** | |
+| **Returns** | - The running
hs.application for the notifier's bundleID, or nil.
|
+
+#### [bundleID](#bundleid)
+| **Signature** | `cp.ui.notifier:bundleID()` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the application 'bundle ID' that this notifier is tracking. |
+| **Parameters** | |
+| **Returns** | - The application 'bundle ID' string (e.g. "com.apple.FinalCut")
|
+
+#### [currentElement](#currentelement)
+| **Signature** | `cp.ui.notifier:currentElement() -> hs._asm.axuielement` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the current `axuielement` being observed. |
+| **Parameters** | |
+| **Returns** | - The
axuielement, or nil if not available.
|
+
+#### [debugging](#debugging)
+| **Signature** | `cp.ui.notifier:debugging([enabled]) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Enables/disables and reports current debugging status. |
+| **Parameters** | - enabled - If
true, debugging notifications will be emitted. If false, it will be disabled. If not provided, no change is made.
|
+| **Returns** | true if currently debugging, false otherwise.
|
+
+#### [pid](#pid)
+| **Signature** | `cp.ui.notifier:pid() -> number` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Returns the PID for the application being observed, or `nil` if it's not running. |
+| **Parameters** | |
+| **Returns** | |
+
+#### [reset](#reset)
+| **Signature** | `cp.ui.notifier:reset() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Resets the notifier |
+
+#### [start](#start)
+| **Signature** | `cp.ui.notifier:start() -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Stops notifying watchers when events happen. |
+| **Parameters** | |
+| **Returns** | - The
cp.ui.notifier instance.
|
+
+#### [update](#update)
+| **Signature** | `cp.ui.notifier:update([force]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Updates any watchers to use the current `axuielement`. |
+| **Parameters** | - force - If
true, the notifier will be updated even if the element has not changed since the last update. Defaults to false.
|
+| **Returns** | - The
cp.ui.notifier instance.
|
+
+#### [watchAll](#watchall)
+| **Signature** | `cp.ui.notifier:watchAll(callbackFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Registers the callback as a watcher for all standard notifications for the current `axuielement`. |
+| **Parameters** | - callbackFn - the function to call when the notification happens.
|
+| **Returns** | - The
cp.ui.notifier instance.
|
+| **Notes** | - This should generally just be used for debugging purposes. It's best to use
watchFor[#watchFor] in most cases. - The callback function should expect 3 arguments and return none. The arguments passed to the callback will be as follows:
- the
hs._asm.axuielement object for the accessibility element which generated the notification. - a string with the notification type.
- A table containing key-value pairs with more information about the notification, if provided. Commonly this will be an empty table.
|
+
+#### [watchFor](#watchfor)
+| **Signature** | `cp.ui.notifier:watchFor(notification, callbackFn) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Registers a function to get called whenever the specified notification type is triggered |
+| **Parameters** | - notifications - The
string or table of strings with the notification type(s) to watch for (e.g. "AXValueChanged"). - callbackFn - The function to call when the matching notification is happens.
|
+| **Returns** | - The
cp.ui.notifier instance.
|
+| **Notes** | - The callback function should expect 3 arguments and return none. The arguments passed to the callback will be as follows:
- the
hs._asm.axuielement object for the accessibility element which generated the notification. - a string with the notification type.
- A table containing key-value pairs with more information about the notification, if provided. Commonly this will be an empty table.
|
+
diff --git a/api/cp/cp.utf16.be.md b/api/cp/cp.utf16.be.md
index aa24474..2b994dd 100644
--- a/api/cp/cp.utf16.be.md
+++ b/api/cp/cp.utf16.be.md
@@ -18,40 +18,40 @@ A pure-LUA implementation of UTF-16 decoding with big-endian ordering.
#### [char](#char)
| **Signature** | `cp.utf16.be.char(...) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Receives zero or more integers, converts each one to its corresponding UTF-16 byte sequence and returns a string with the concatenation of all these sequences. |
-| **Parameters** | - `...` - The list of UCL codepoint integers to convert.
|
-| **Returns** | - All the codepoints converted to UTF-16, concatonated into a string.
|
+| **Type** | Function |
+| **Description** | Receives zero or more integers, converts each one to its corresponding UTF-16 byte sequence and returns a string with the concatenation of all these sequences. |
+| **Parameters** | ... - The list of UCL codepoint integers to convert.
|
+| **Returns** | - All the codepoints converted to UTF-16, concatonated into a string.
|
#### [codepoint](#codepoint)
| **Signature** | `cp.utf16.be.codepoint(s [, i [, j]]) -> integer...` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included). The default for `i` is 1 and for `j` is `i`. It raises an error if it meets any invalid byte sequence. |
-| **Parameters** | - `s` - The string
- `i` - The starting index. Defaults to `1`.
- `j` - The ending index. Defaults to `i`.
|
-| **Returns** | - a list of codepoint integers for all characters in the matching range.
|
+| **Type** | Function |
+| **Description** | Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included). The default for `i` is 1 and for `j` is `i`. It raises an error if it meets any invalid byte sequence. |
+| **Parameters** | s - The stringi - The starting index. Defaults to 1.j - The ending index. Defaults to i.
|
+| **Returns** | - a list of codepoint integers for all characters in the matching range.
|
#### [codes](#codes)
| **Signature** | `cp.utf16.be.codes(s) -> iterator` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns values so that the construction |
-| **Parameters** | - `s` - The string to iterate through.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Returns values so that the construction |
+| **Parameters** | s - The string to iterate through.
|
+| **Returns** | |
#### [len](#len)
| **Signature** | `cp.utf16.be.len (s [, i [, j]]) -> number | boolean, number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the number of UTF-16 characters in string `s` that start between positions `i` and `j` (both inclusive). The default for `i` is 1 and for `j` is -1. If it finds any invalid byte sequence, returns a false value plus the position of the first invalid byte. |
-| **Parameters** | - `s` - The UTF-16 string
- `i` - The starting index. Defaults to `1`.
- `j` - The ending index. Defaults to `-1`.
|
-| **Returns** | - the length, or `false` and the first invalid byte index.
|
+| **Type** | Function |
+| **Description** | Returns the number of UTF-16 characters in string `s` that start between positions `i` and `j` (both inclusive). The default for `i` is 1 and for `j` is -1. If it finds any invalid byte sequence, returns a false value plus the position of the first invalid byte. |
+| **Parameters** | s - The UTF-16 stringi - The starting index. Defaults to 1.j - The ending index. Defaults to -1.
|
+| **Returns** | - the length, or
false and the first invalid byte index.
|
#### [offset](#offset)
| **Signature** | `cp.utf16.be.offset (s, n [, i]) -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts. A negative `n` gets characters before position `i`. The default for `i` is 1 when `n` is non-negative and `#s + 1` otherwise, so that `utf8.offset(s, -n)` gets the offset of the `n`-th character from the end of the string. If the specified character is neither in the subject nor right after its end, the function returns nil. |
-| **Parameters** | - `s` - The string
- `n` - The character number to find.
- `i` - The initial position to start from.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts. A negative `n` gets characters before position `i`. The default for `i` is 1 when `n` is non-negative and `#s + 1` otherwise, so that `utf8.offset(s, -n)` gets the offset of the `n`-th character from the end of the string. If the specified character is neither in the subject nor right after its end, the function returns nil. |
+| **Parameters** | s - The stringn - The character number to find.i - The initial position to start from.
|
+| **Returns** | |
diff --git a/api/cp/cp.utf16.le.md b/api/cp/cp.utf16.le.md
index a2f9105..b079bec 100644
--- a/api/cp/cp.utf16.le.md
+++ b/api/cp/cp.utf16.le.md
@@ -19,48 +19,48 @@ A pure-LUA implementation of UTF-16 decoding with little-endian ordering.
#### [char](#char)
| **Signature** | `cp.utf16.le.char(...) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Receives zero or more integers, converts each one to its corresponding UTF-16 byte sequence and returns a string with the concatenation of all these sequences. |
-| **Parameters** | - `...` - The list of UCL codepoint integers to convert.
|
-| **Returns** | - All the codepoints converted to UTF-16, concatonated into a string.
|
+| **Type** | Function |
+| **Description** | Receives zero or more integers, converts each one to its corresponding UTF-16 byte sequence and returns a string with the concatenation of all these sequences. |
+| **Parameters** | ... - The list of UCL codepoint integers to convert.
|
+| **Returns** | - All the codepoints converted to UTF-16, concatonated into a string.
|
#### [codepoint](#codepoint)
| **Signature** | `cp.utf16.le.codepoint(s [, i [, j]]) -> integer...` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included). The default for `i` is 1 and for `j` is `i`. It raises an error if it meets any invalid byte sequence. |
-| **Parameters** | - `s` - The string
- `i` - The starting index. Defaults to `1`.
- `j` - The ending index. Defaults to `i`.
|
-| **Returns** | - a list of codepoint integers for all characters in the matching range.
|
+| **Type** | Function |
+| **Description** | Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included). The default for `i` is 1 and for `j` is `i`. It raises an error if it meets any invalid byte sequence. |
+| **Parameters** | s - The stringi - The starting index. Defaults to 1.j - The ending index. Defaults to i.
|
+| **Returns** | - a list of codepoint integers for all characters in the matching range.
|
#### [codes](#codes)
| **Signature** | `cp.utf16.le.codes(s) -> iterator` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns values so that the construction |
-| **Parameters** | - `s` - The string to iterate through.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Returns values so that the construction |
+| **Parameters** | s - The string to iterate through.
|
+| **Returns** | |
#### [len](#len)
| **Signature** | `cp.utf16.len (bigEndian, s [, i [, j]]) -> number | boolean, number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the number of UTF-16 characters in string `s` that start between positions `i` and `j` (both inclusive). The default for `i` is 1 and for `j` is -1. If it finds any invalid byte sequence, returns a false value plus the position of the first invalid byte. |
-| **Parameters** | - `bigEndian` - If true, the string is 'big-endian'.
- `s` - The UTF-16 string
- `i` - The starting index. Defaults to `1`.
- `j` - The ending index. Defaults to `-1`.
|
-| **Returns** | - the length, or `false` and the first invalid byte index.
|
+| **Type** | Function |
+| **Description** | Returns the number of UTF-16 characters in string `s` that start between positions `i` and `j` (both inclusive). The default for `i` is 1 and for `j` is -1. If it finds any invalid byte sequence, returns a false value plus the position of the first invalid byte. |
+| **Parameters** | bigEndian - If true, the string is 'big-endian'.s - The UTF-16 stringi - The starting index. Defaults to 1.j - The ending index. Defaults to -1.
|
+| **Returns** | - the length, or
false and the first invalid byte index.
|
#### [len](#len)
| **Signature** | `cp.utf16.le.len (s [, i [, j]]) -> number | boolean, number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the number of UTF-16 characters in string `s` that start between positions `i` and `j` (both inclusive). The default for `i` is 1 and for `j` is -1. If it finds any invalid byte sequence, returns a false value plus the position of the first invalid byte. |
-| **Parameters** | - `s` - The UTF-16 string
- `i` - The starting index. Defaults to `1`.
- `j` - The ending index. Defaults to `-1`.
|
-| **Returns** | - the length, or `false` and the first invalid byte index.
|
+| **Type** | Function |
+| **Description** | Returns the number of UTF-16 characters in string `s` that start between positions `i` and `j` (both inclusive). The default for `i` is 1 and for `j` is -1. If it finds any invalid byte sequence, returns a false value plus the position of the first invalid byte. |
+| **Parameters** | s - The UTF-16 stringi - The starting index. Defaults to 1.j - The ending index. Defaults to -1.
|
+| **Returns** | - the length, or
false and the first invalid byte index.
|
#### [offset](#offset)
| **Signature** | `cp.utf16.le.offset (s, n [, i]) -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts. A negative `n` gets characters before position `i`. The default for `i` is 1 when `n` is non-negative and `#s + 1` otherwise, so that `utf8.offset(s, -n)` gets the offset of the `n`-th character from the end of the string. If the specified character is neither in the subject nor right after its end, the function returns nil. |
-| **Parameters** | - `s` - The string
- `n` - The character number to find.
- `i` - The initial position to start from.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts. A negative `n` gets characters before position `i`. The default for `i` is 1 when `n` is non-negative and `#s + 1` otherwise, so that `utf8.offset(s, -n)` gets the offset of the `n`-th character from the end of the string. If the specified character is neither in the subject nor right after its end, the function returns nil. |
+| **Parameters** | s - The stringn - The character number to find.i - The initial position to start from.
|
+| **Returns** | |
diff --git a/api/cp/cp.utf16.md b/api/cp/cp.utf16.md
index 5f90465..e84a4f7 100644
--- a/api/cp/cp.utf16.md
+++ b/api/cp/cp.utf16.md
@@ -21,32 +21,32 @@ A pure-LUA implementation of UTF-16 decoding
#### [char](#char)
| **Signature** | `cp.utf16.char(bigEndian, ...) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Receives zero or more integers, converts each one to its corresponding UTF-16 byte sequence and returns a string with the concatenation of all these sequences. |
-| **Parameters** | - `bigEndian` - If `true`, the output will list the 'big' bytes first
- `...` - The list of UCL codepoint integers to convert.
|
-| **Returns** | - All the codepoints converted to UTF-16, concatonated into a string.
|
+| **Type** | Function |
+| **Description** | Receives zero or more integers, converts each one to its corresponding UTF-16 byte sequence and returns a string with the concatenation of all these sequences. |
+| **Parameters** | bigEndian - If true, the output will list the 'big' bytes first... - The list of UCL codepoint integers to convert.
|
+| **Returns** | - All the codepoints converted to UTF-16, concatonated into a string.
|
#### [codepoint](#codepoint)
| **Signature** | `cp.utf16.codepoint(bigEndian, s [, i [, j]]) -> integer...` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included). The default for `i` is 1 and for `j` is `i`. It raises an error if it meets any invalid byte sequence. |
-| **Parameters** | - `bigEndian` - (optional) If set to `true`, the string is encoded in 'big-endian' format.
- `s` - The string
- `i` - The starting index. Defaults to `1`.
- `j` - The ending index. Defaults to `i`.
|
-| **Returns** | - a list of codepoint integers for all characters in the matching range.
|
+| **Type** | Function |
+| **Description** | Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included). The default for `i` is 1 and for `j` is `i`. It raises an error if it meets any invalid byte sequence. |
+| **Parameters** | bigEndian - (optional) If set to true, the string is encoded in 'big-endian' format.s - The stringi - The starting index. Defaults to 1.j - The ending index. Defaults to i.
|
+| **Returns** | - a list of codepoint integers for all characters in the matching range.
|
#### [codes](#codes)
| **Signature** | `cp.utf16.codes(bigEndian, s) -> iterator` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns values so that the construction |
-| **Parameters** | - `bigEndian` - If `true`, the provided string is in 'big-endian' encoding.
- `s` - The string to iterate through.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Returns values so that the construction |
+| **Parameters** | bigEndian - If true, the provided string is in 'big-endian' encoding.s - The string to iterate through.
|
+| **Returns** | |
#### [offset](#offset)
| **Signature** | `cp.utf16.offset (bigEndian, s, n [, i]) -> number` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts. A negative `n` gets characters before position `i`. The default for `i` is 1 when `n` is non-negative and `#s + 1` otherwise, so that `utf8.offset(s, -n)` gets the offset of the `n`-th character from the end of the string. If the specified character is neither in the subject nor right after its end, the function returns nil. |
-| **Parameters** | - `bigEndian` - If `true`, the encoding is 'big-endian'. Defaults to `false`
- `s` - The string
- `n` - The character number to find.
- `i` - The initial position to start from.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts. A negative `n` gets characters before position `i`. The default for `i` is 1 when `n` is non-negative and `#s + 1` otherwise, so that `utf8.offset(s, -n)` gets the offset of the `n`-th character from the end of the string. If the specified character is neither in the subject nor right after its end, the function returns nil. |
+| **Parameters** | bigEndian - If true, the encoding is 'big-endian'. Defaults to falses - The stringn - The character number to find.i - The initial position to start from.
|
+| **Returns** | |
diff --git a/api/cp/cp.watcher.md b/api/cp/cp.watcher.md
index 3e4c9c9..9a60d83 100644
--- a/api/cp/cp.watcher.md
+++ b/api/cp/cp.watcher.md
@@ -48,50 +48,50 @@ Then, whenever `thing.update(xxx)` is called, the watcher will output `"New valu
#### [new](#new)
| **Signature** | `cp.watcher.new(...) -> watcher` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Constructs a new watcher instance. |
-| **Parameters** | - `...` - The list of event name strings supported by the watcher.
|
-| **Returns** | |
+| **Type** | Function |
+| **Description** | Constructs a new watcher instance. |
+| **Parameters** | ... - The list of event name strings supported by the watcher.
|
+| **Returns** | |
### Methods
#### [events](#events)
| **Signature** | `cp.watcher:events()` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns a list of the event names supported by this watcher. |
+| **Type** | Method |
+| **Description** | Returns a list of the event names supported by this watcher. |
| **Parameters** | |
-| **Returns** | - The table of event names.
|
+| **Returns** | - The table of event names.
|
#### [getCount](#getcount)
| **Signature** | `cp.watcher:getCount()` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Returns the number of watchers currently registered. |
+| **Type** | Method |
+| **Description** | Returns the number of watchers currently registered. |
| **Parameters** | |
-| **Returns** | |
+| **Returns** | |
#### [notify](#notify)
| **Signature** | `cp.watcher:notify(type, ...) -> nil` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Notifies watchers of the specified event type. |
-| **Parameters** | - `type` - The event type to notify. Must be one of the supported events.
- `...` - These parameters are passed directly to the event watcher functions.
|
-| **Returns** | |
+| **Type** | Method |
+| **Description** | Notifies watchers of the specified event type. |
+| **Parameters** | type - The event type to notify. Must be one of the supported events.... - These parameters are passed directly to the event watcher functions.
|
+| **Returns** | |
#### [unwatch](#unwatch)
| **Signature** | `cp.watcher:unwatch(id) -> boolean` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Removes the watchers which were added with the specified ID. |
-| **Parameters** | - `id` - The unique ID returned from `watch`.
|
-| **Returns** | - `true` if a watcher with the specified ID exists and was successfully removed.
|
+| **Type** | Method |
+| **Description** | Removes the watchers which were added with the specified ID. |
+| **Parameters** | id - The unique ID returned from watch.
|
+| **Returns** | true if a watcher with the specified ID exists and was successfully removed.
|
#### [watch](#watch)
| **Signature** | `cp.watcher:watch(events) -> id` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Method |
-| **Description** | Adds a watcher for the specified events. |
-| **Parameters** | - `events` - A table of functions, one for each event to watch.
|
-| **Returns** | - * A unique ID that can be passed to `unwatch` to stop watching.
|
+| **Type** | Method |
+| **Description** | Adds a watcher for the specified events. |
+| **Parameters** | events - A table of functions, one for each event to watch.
|
+| **Returns** | - A unique ID that can be passed to
unwatch to stop watching.
|
diff --git a/api/cp/cp.web.block.md b/api/cp/cp.web.block.md
new file mode 100644
index 0000000..b84d5bc
--- /dev/null
+++ b/api/cp/cp.web.block.md
@@ -0,0 +1,21 @@
+# [docs](index.md) » cp.web.block
+---
+
+Block.
+
+## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+
+## API Documentation
+
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.web.block.is(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `value` is an `cp.web.block`. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it is an HTML block, or false otherwise.
|
+
diff --git a/api/cp/cp.web.generate.md b/api/cp/cp.web.generate.md
index 5d0fcf1..c85a07b 100644
--- a/api/cp/cp.web.generate.md
+++ b/api/cp/cp.web.generate.md
@@ -20,56 +20,56 @@ Functions for Generating HTML UI Items
#### [button](#button)
| **Signature** | `cp.web.generate.button() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a HTML Button |
+| **Type** | Function |
+| **Description** | Generates a HTML Button |
| **Parameters** | - data - Table containing the data you want to display on the Checkbox
- customTrigger - Custom label used for JavaScript Callback
- customWidth - Number to set the width of the button to
- customID - Overrides the random HTML ID
|
-| **Returns** | - String containing the HTML
|
+| **Returns** | - String containing the HTML
|
#### [checkbox](#checkbox)
| **Signature** | `cp.web.generate.checkbox() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a HTML Checkbox |
+| **Type** | Function |
+| **Description** | Generates a HTML Checkbox |
| **Parameters** | - data - Table containing the data you want to display on the Checkbox
- customTrigger - Custom label used for JavaScript Callback
- customID - Custom ID used for the HTML objects
|
-| **Returns** | - String containing the HTML
|
+| **Returns** | - String containing the HTML
|
#### [dropdown](#dropdown)
| **Signature** | `cp.web.generate.dropdown() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a HTML Dropdown |
+| **Type** | Function |
+| **Description** | Generates a HTML Dropdown |
| **Parameters** | - title - Title to put in front of the Dropdown. Can be "".
- data - Table containing the data you want to display on the Checkbox
- customTrigger - Custom label used for JavaScript Callback
|
-| **Returns** | - String containing the HTML
|
+| **Returns** | - String containing the HTML
|
#### [heading](#heading)
| **Signature** | `cp.web.generate.heading() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a HTML Heading |
+| **Type** | Function |
+| **Description** | Generates a HTML Heading |
| **Parameters** | - data - Table containing the data you want to display on the Checkbox
|
-| **Returns** | - String containing the HTML
|
+| **Returns** | - String containing the HTML
|
#### [javascript](#javascript)
-| **Signature** | `cp.web.generate.javascript(script, context) -> cp.web.html.block` |
+| **Signature** | `cp.web.generate.javascript(script, context) -> cp.web.html` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a HTML Heading |
+| **Type** | Function |
+| **Description** | Generates a HTML Heading |
| **Parameters** | - data - Table containing the data you want to display on the Checkbox
|
-| **Returns** | - String containing the HTML
|
+| **Returns** | - String containing the HTML
|
#### [setWebviewLabel](#setwebviewlabel)
| **Signature** | `cp.web.generate.setWebviewLabel() -> none` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Sets the WebView Label |
+| **Type** | Function |
+| **Description** | Sets the WebView Label |
| **Parameters** | - value - WebView Label as string
|
-| **Returns** | |
+| **Returns** | |
#### [text](#text)
| **Signature** | `cp.web.generate.text() -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a blank HTML |
+| **Type** | Function |
+| **Description** | Generates a blank HTML |
| **Parameters** | - data - Table containing the data you want to display.
|
-| **Returns** | - String containing the HTML
|
+| **Returns** | - String containing the HTML
|
diff --git a/api/cp/cp.web.html.md b/api/cp/cp.web.html.md
index ee740bc..73255c7 100644
--- a/api/cp/cp.web.html.md
+++ b/api/cp/cp.web.html.md
@@ -9,37 +9,72 @@ Examples:
```lua
local html = require "cp.web.html"
-print html.p "Hello world!" -- "Hello world!
"
-print html.p { class = "custom" } "Hello world!" -- "Hello world!
"
+print html.p "Hello world!" -- "Hello world!
"
+print html.p { class = "custom" } "Hello world!" -- "Hello world!
"
print html.p { class = "custom" } (
- html.b "Bold" .. " and " .. html.i "italic" .. "."
+ html.b "Bold" .. " and " .. html.i "italic" .. "."
)
-- "Bold and italic.
"
-print html("1 < 2") -- "1 < 2" (escaped)
-print html("1 < 2", true) -- "1 < 2" (unescaped)
-print html.p ("bold", true) -- "bold
"
+print html("1 < 2") -- "1 < 2" (escaped)
+print html("1 < 2", true) -- "1 < 2" (unescaped)
+print html.p ("bold", true) -- "bold
"
```
Be aware that concatonating with ".." can behave unexpectedly in some cases. For example:
```lua
local name = "world!"
-print html.p "Hello " .. name -- "Hello
world!"
+print html.p "Hello " .. name -- "Hello
world!"
```
The `"Hello"` gets inserted into the `p` tag, but the `name` gets concatonated after the closing tag.
To get the `name` inside the `p` tag, we need to put brackets around the content:
```lua
-print html.p ("Hello " .. name) -- "Hello world!
"
+print html.p ("Hello " .. name) -- "Hello world!
"
```
Any tag name can be generated, along with any attribute. The results are correctly escaped.
There are two 'special' tag names:
- * `CDATA` - will generate a `<![CDATA[ ... ]]>` section with the content contained.
- * `__` - (double underscore) will generate a `<!-- ... -->` comment block.
+ * `CDATA` - will generate a `<![CDATA[ ... ]]>` section with the content contained.
+ * `__` - (double underscore) will generate a `<!-- ... -->` comment block.
## API Overview
+* Functions - API calls offered directly by the extension
+ * [is](#is)
+* Methods - API calls which can only be made on an object returned by a constructor
+ * [append](#append)
+ * [prepend](#prepend)
## API Documentation
+### Functions
+
+#### [is](#is)
+| **Signature** | `cp.web.html.is(value) -> boolean` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Function |
+| **Description** | Checks if the `value` is an `cp.web.html` block. |
+| **Parameters** | - value - the value to check
|
+| **Returns** | true if it is an HTML block, or false otherwise.
|
+
+### Methods
+
+#### [append](#append)
+| **Signature** | `cp.web.html:append(newContent[, escaped]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Appends the content. If specified, the `escaped` value will override any default escaping for the content type. |
+| **Parameters** | - newContent - The content to append to the contents of the HTML block.
- escaped - May be set to override default escaping for the content.
|
+| **Returns** | - The same HTML block instance.
|
+| **Notes** | - The
newContent may be almost any value. The default handling is below: cp.web.html instance: Any other HTML block can be added. Default escaping: false. function: Functions will be executed every time the HTML block is converted to a string. Default escaping: whatever the default is for the returned value. list: Tables which are lists will be iterrated and each item will be evaluated each time the HTML block is converted to a string. Default escaping: the default for each item. everything else: Converted to a string via the tostring function. Default escaping: true.
|
+
+#### [prepend](#prepend)
+| **Signature** | `cp.web.html:prepend(newContent[, escaped]) -> self` |
+| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| **Type** | Method |
+| **Description** | Prepends the content. If specified, the `escaped` value will override any default escaping for the content type. |
+| **Parameters** | - newContent - The content to prepend to the contents of the HTML block.
- escaped - May be set to override default escaping for the content.
|
+| **Returns** | - The same HTML block instance.
|
+| **Notes** | - The
newContent may be almost any value. The default handling is below: cp.web.html instance: Any other HTML block can be added. Default escaping: false. function: Functions will be executed every time the HTML block is converted to a string. Default escaping: whatever the default is for the returned value. list: Tables which are lists will be iterrated and each item will be evaluated each time the HTML block is converted to a string. Default escaping: the default for each item. everything else: Converted to a string via the tostring function. Default escaping: true.
|
+
diff --git a/api/cp/cp.web.text.md b/api/cp/cp.web.text.md
index d25e89a..1424b6f 100644
--- a/api/cp/cp.web.text.md
+++ b/api/cp/cp.web.text.md
@@ -15,16 +15,16 @@ Functions for managing text on the web.
#### [escapeXML](#escapexml)
| **Signature** | `cp.web.text.escapeXML(s) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Escapes a string |
+| **Type** | Function |
+| **Description** | Escapes a string |
| **Parameters** | - s - The string you want to escape
|
-| **Returns** | - The string, escaped for XML.
|
+| **Returns** | - The string, escaped for XML.
|
#### [unescapeXML](#unescapexml)
| **Signature** | `cp.web.text.unescapeXML(s) -> string` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Unescapes a string from XML encoding. |
+| **Type** | Function |
+| **Description** | Unescapes a string from XML encoding. |
| **Parameters** | - s - The string you want to unescape
|
-| **Returns** | |
+| **Returns** | |
diff --git a/api/cp/cp.web.ui.md b/api/cp/cp.web.ui.md
index 6ff0bf7..854d2cf 100644
--- a/api/cp/cp.web.ui.md
+++ b/api/cp/cp.web.ui.md
@@ -13,6 +13,7 @@ and if functions are provided, they are re-evaluated every time the element is g
* [javascript](#javascript)
* [password](#password)
* [select](#select)
+ * [style](#style)
* [template](#template)
* [textbox](#textbox)
* Constructors - API calls which return an object, typically one that offers API methods
@@ -26,82 +27,90 @@ and if functions are provided, they are re-evaluated every time the element is g
#### [heading](#heading)
| **Signature** | `cp.web.ui.heading(params) -> cp.web.html` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Creates a `cp.web.html` element for a heading with a specific level |
-| **Parameters** | - `params` - The parameters table. Details below.
|
-| **Returns** | - `cp.web.html` element representing the heading.
|
-| **Notes** | - The `params` table has the following fields:
- ** `text` - The string (or function) containing the text of the heading.
- ** `level` - The heading level (or function) (1-7). Defaults to 3.
- ** `class` - The CSS class (or function) for the heading tag.
|
+| **Type** | Function |
+| **Description** | Creates a `cp.web.html` element for a heading with a specific level |
+| **Parameters** | params - The parameters table. Details below.
|
+| **Returns** | cp.web.html element representing the heading.
|
+| **Notes** | - The
params table has the following fields: text - The string (or function) containing the text of the heading. level - The heading level (or function) (1-7). Defaults to 3. ** class - The CSS class (or function) for the heading tag.
|
#### [img](#img)
| **Signature** | `cp.web.ui.img(params) -> cp.web.html` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates a `cp.web.html` `img` element. |
-| **Parameters** | - `params` - A table or function returning a table with the checkbox data.
|
-| **Returns** | - A `cp.web.html` with the select defined.
|
-| **Notes** | - The `params` table has the following supported fields:
- ** `src` - The source of the image. If this points to a local file, it will be encoded as Base64.
- ** `class` - A string, (or function returning a string) with the CSS class for the element.
- ** `width` - The width of the image.
- ** `height` - The height of the image.
|
+| **Type** | Function |
+| **Description** | Generates a `cp.web.html` `img` element. |
+| **Parameters** | params - A table or function returning a table with the checkbox data.
|
+| **Returns** | - A
cp.web.html with the select defined.
|
+| **Notes** | - The
params table has the following supported fields: src - The source of the image. If this points to a local file, it will be encoded as Base64. class - A string, (or function returning a string) with the CSS class for the element. width - The width of the image. height - The height of the image.
|
#### [javascript](#javascript)
-| **Signature** | `cp.web.ui.javascript(script, context) -> cp.web.html` |
+| **Signature** | `cp.web.ui.javascript(script[, context][, naked]) -> cp.web.html` |
| -----------------------------------------------------|---------------------------------------------------------------------------------------------------------|
-| **Type** | Function |
-| **Description** | Generates an HTML script element which will execute the provided |
-| **Parameters** | - script - String containing the JavaScript to execute.
- context - Table containing any values to inject into the script.
|
-| **Returns** | - a `cp.web.html` element representing the JavaScript block.
|
+| **Type** | Function |
+| **Description** | Generates an HTML script element which will execute the provided |
+| **Parameters** |