<commit_before># hello today!

what a fine day today is.

**question for you now!** 

do you want to spew hearts or other images of your choosing everywhere all over the place on your internet website?

you are in luck, lucky person! 

## quick start (a.k.a the defibrillator HA!)
give me selector, and i make sure your `click` and `touchend` events are full of happy happy joy.

```javascript
var dawh = SuperHearts(); // now click!!!
```

# Here is Some More Involved Documentation
sorry, lucky person, but these docs are not so great now! you still hopefully use my hearts though.

## Presets
A `preset` is a helper function with a set of default options for a given call to `SuperHearts`. 
You call a `preset` on the main `SuperHearts` object.

`SuperHearts` comes with a few presets out of the box, 
but you can also register your own (see below).


### BigRing
**Evented**

`BigRing` shoots out a large concentric band of hearts. Yay! 
It is a composition of 18 different option configurations, 
but we'll get to that whole song and dance (configuration) in two shakes... 
Just sit tight, buddy.
```javascript
  // Hearts radiate in a large concentric band from the click or touch point.
  var biggie = SuperHearts.BigRing();
```

### Circle
**Evented**

`Circle` is the primary default. 
That is, calling `SuperHearts("#my-element")` is the same as `SuperHearts.Circle("#my-element")`.
```javascript
// Hearts radiate in a lackadaisical ring pattern around a user's click or touch
var circ = SuperHearts.Circle(); // note: this is equivalent to calling `SuperHearts()`
```

### Compass
**Evented**

`Compass` is a composition of four animations. The current implementation of a composed preset (a preset that combines multple separate animation configurations on the same event) makes further composition a little difficult because I hacked it together without thinking much about how you'... Ah. I just realized how to fix this! Apply every new call's new options to _all_ of the preset animation configs individually. If you find this note I forgot to delete it. Please submit an issue.
```javascript
// Four hearts shoot out from the four compass direction of the click/touch point )North, East, South, and West).
var compass = SuperHearts.Compass();
```

### Line
**Evented**
```javascript
// Hearts float upwards and horizontally from the user's click or touch
var line = SuperHearts.Line();
```

### Geyser
**Continuous**
```javascript
// Hearts continuously spew from a fixed point
var line = SuperHearts.Geyser();
```

### Button
**Evented**

The `Button` preset is good for attaching an animation to an interactive element.
Animations on the specified element will start from a fixed point, 
which is calculated as the "center of mass" of the element's `boundingRect`.

```javascript
// Fixed starting point determined by `boundingRect` of `#myButton`.
var butt = SuperHearts.Button("#myButton");
```

### Add your own
To add your own preset to the `SuperHearts` object, 
use the `SuperHearts.registerPreset` method. 
This method takes a `name` parameter and an options hash.

```javascript
// Register a `preset` called `Foo`
var fooConfig = { /* put your desired settings here */ }
SuperHearts.registerPreset("Foo", fooConfig);
// Now you can call
SuperHearts.Foo("#my-element");
```

The defaults that you assign to a `preset` 
can be easily overriden in subsequent calls to your `preset`, as follows:

```javascript
var newFooConfig = { /* Override some defaults that you previously set on Foo */ };
SuperHearts.Foo("#my-element", newFooConfig);
```


## Options
_:tada: configuration!_

Wait. Are you not into configuration? That's okay! All options have defaults.

_:confetti_ball: yeah defaults!_


:broken_heart: means an option is a little **off-beat**. :joy_cat:

:warning: means an option's name will probably change. Or it might become a :ghost:. Or a :bug:.

Note that defaults depend on the preset configuration (duh, right?), meaning 
**all of the defaults below refer to the `Circle` preset's default**.



### angle
`Array` of length 2 **or** `Number`

Determines the (inclusive) range of angles (measured in degrees) that is used to randomly rotate hearts. You may specify a range outside of `[0, 360]`. 

If you only supply a `Number` (call it `n`), it is treated as `[n,n]`. It will always be `n`. Forever.

Default is `[0, 359]` (deg)


### :broken_heart: blur
`Number`

_Work in progress._ <commit_msg>swapped order of phrases in readme<commit_after># hello today!

what a fine day today is.

**question for you now!** 

do you want to spew hearts or other images of your choosing everywhere all over the place on your internet website?

you are in luck, lucky person! 

## quick start (a.k.a the defibrillator HA!)
give me selector, and i make sure your `click` and `touchend` events are full of happy happy joy.

```javascript
var dawh = SuperHearts(); // now click!!!
```

# Here is Some More Involved Documentation
sorry, lucky person, but these docs are not so great now! you still hopefully use my hearts though.

## Presets
A `preset` is a helper function with a set of default options for a given call to `SuperHearts`. 
You call a `preset` on the main `SuperHearts` object.

`SuperHearts` comes with a few presets out of the box, 
but you can also register your own (see below).


### BigRing
**Evented**

`BigRing` shoots out a large concentric band of hearts. Yay! 
It is a composition of 18 different option configurations, 
but we'll get to that whole song and dance (configuration) in two shakes... 
Just sit tight, buddy.
```javascript
  // Hearts radiate in a large concentric band from the click or touch point.
  var biggie = SuperHearts.BigRing();
```

### Circle
**Evented**

`Circle` is the primary default. 
That is, calling `SuperHearts("#my-element")` is the same as `SuperHearts.Circle("#my-element")`.
```javascript
// Hearts radiate in a lackadaisical ring pattern around a user's click or touch
var circ = SuperHearts.Circle(); // note: this is equivalent to calling `SuperHearts()`
```

### Compass
**Evented**

`Compass` is a composition of four animations. The current implementation of a composed preset (a preset that combines multple separate animation configurations on the same event) makes further composition a little difficult because I hacked it together without thinking much about how you'... Ah. I just realized how to fix this! Apply every new call's new options to _all_ of the preset animation configs individually. If you find this note I forgot to delete it. Please submit an issue.
```javascript
// Four hearts shoot out from the four compass direction of the click/touch point )North, East, South, and West).
var compass = SuperHearts.Compass();
```

### Line
**Evented**
```javascript
// Hearts float upwards and horizontally from the user's click or touch
var line = SuperHearts.Line();
```

### Geyser
**Continuous**
```javascript
// Hearts continuously spew from a fixed point
var line = SuperHearts.Geyser();
```

### Button
**Evented**

The `Button` preset is good for attaching an animation to an interactive element.
Animations on the specified element will start from a fixed point, 
which is calculated as the "center of mass" of the element's `boundingRect`.

```javascript
// Fixed starting point determined by `boundingRect` of `#myButton`.
var butt = SuperHearts.Button("#myButton");
```

### Add your own
To add your own preset to the `SuperHearts` object, 
use the `SuperHearts.registerPreset` method. 
This method takes a `name` parameter and an options hash.

```javascript
// Register a `preset` called `Foo`
var fooConfig = { /* put your desired settings here */ }
SuperHearts.registerPreset("Foo", fooConfig);
// Now you can call
SuperHearts.Foo("#my-element");
```

The defaults that you assign to a `preset` 
can be easily overriden in subsequent calls to your `preset`, as follows:

```javascript
var newFooConfig = { /* Override some defaults that you previously set on Foo */ };
SuperHearts.Foo("#my-element", newFooConfig);
```


## Options
_:tada: configuration!_

Wait. Are you not into configuration? That's okay! All options have defaults.

_:confetti_ball: yeah defaults!_

Note that defaults depend on the preset configuration (duh, right?), meaning 
**all of the defaults below refer to the `Circle` preset's default**.

:broken_heart: means an option is a little **off-beat**. :joy_cat:

:warning: means an option's name will probably change. Or it might become a :ghost:. Or a :bug:.


### angle
`Array` of length 2 **or** `Number`

Determines the (inclusive) range of angles (measured in degrees) that is used to randomly rotate hearts. You may specify a range outside of `[0, 360]`. 

If you only supply a `Number` (call it `n`), it is treated as `[n,n]`. It will always be `n`. Forever.

Default is `[0, 359]` (deg)


### :broken_heart: blur
`Number`

_Work in progress._ 
{'fraction_non_alphanumeric': 0.1009102146308574, 'fraction_numerical': 0.002472187886279357, 'mean_word_length': 4.407047387606318, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '32208', 'n_tokens_mistral': 2641, 'n_tokens_neox': 2482, 'n_words': 1261}