npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

affirming-author

v1.0.0

Published

Authors phrases and sentences that dynamically affirm people's names and pronouns for use in scripts and apps.

Downloads

396

Readme

affirming-author

Authors phrases and sentences that dynamically affirm people's names and pronouns for use in scripts and apps.

Table of Contents

Usage

1. Create an Author Function

An author function is a function that takes information about a person (pronouns + other custom variables) and authors an affirming version of the phrase that uses the person's pronouns.

Creating an author function is easy: simply write three versions of the phrase. The first is a "pronounless" version that doesn't use any gender pronouns, or uses a few they/them pronouns if absolutely necessary. The second is a "she" version of the phrase, using she/her pronouns. The third is a "they" version of the phrase, using they/them pronouns. Wrap each pronoun in square brackets like this: [They] or [they]. Example:

// Import affirming-author
import createAuthorFunction from 'affirming-author';

// Create author function
const authorEmmArrivalNotice = createAuthorFunction({
  pronounless: 'Emm uploaded a homework submission before leaving for spring break. Emm worked alone and are taking this course for graduate-level credit.',
  they: 'Emm uploaded [their] homework before [they] left for spring break. [They] worked by [themselves] on this project because [they] are taking this course for graduate-level credit.',
  she: 'Emm uploaded [her] homework before [she] left for spring break. [She] worked by [herself] on this project because [she] is taking this course for graduate-level credit.',
});

You can use any pronoun case, as well as contractions. Here are some examples:

they them theirs themselves they'd they're they'll she her hers herself she'd she's she'll

You can also add custom variable placeholders like [Name] or [name]:

// Import affirming-author
import createAuthorFunction from 'affirming-author';

// Create author function
const authorAttendeeArrivalNotice = createAuthorFunction({
  pronounless: '[Name] uploaded a homework submission before leaving for spring break. [Name] worked alone and are taking this course for graduate-level credit.',
  they: '[Name] uploaded [their] homework before [they] left for spring break. [They] worked by [themselves] on this project because [they] are taking this course for graduate-level credit.',
  she: '[Name] uploaded [her] homework before [she] left for spring break. [She] worked by [herself] on this project because [she] is taking this course for graduate-level credit.',
});

Variable names are case-insensitive, but if the variable name is capitalized, the value that fills the placeholder will also be automatically capitalized. Example:

// With the following template:
'[Vehicle] chargers are on level 4. Follow signs for "[vehicle] charging."'

// If vehicle='car' then that would result in:
'Car chargers are on level 4. Follow signs for "car charging."'

2. Author the Phrase

Once you have the required info (pronouns + other custom variables), use the author function to create an affirming version of the phrase. Provide pronouns either as a string (e.g. 'they/them') or as a value of the exported Pronoun enum (e.g. Pronoun.TheyThem). You can pass the pronouns directly into the author function or you can pass in an object that contains a "pronouns" key:

// Import affirming-author
import createAuthorFunction, { Pronouns } from 'affirming-author';

// All of the following examples...
const notice1 = authorEmmArrivalNotice('they/them');
const notice2 = authorEmmArrivalNotice(Pronouns.TheyThem);
const notice3 = authorEmmArrivalNotice({ pronouns: 'they/them' });
const notice4 = authorEmmArrivalNotice({ pronouns: Pronouns.TheyThem });

// ...produce the same result:
> 'Emm uploaded their homework before they left for spring break. They worked by themselves on this project because they are taking this course for graduate-level credit.'

If including custom variables, include the variable values alongside the pronouns:

// Import affirming-author
import createAuthorFunction, { Pronouns } from 'affirming-author';

// All of the following examples...
const notice5 = authorEmmArrivalNotice({ name: 'Nara', pronouns: 'ze/zir' });
const notice6 = authorEmmArrivalNotice({ name: 'Nara', pronouns: Pronouns.ZeZir });

// ...produce the same result:
> 'Nara uploaded zir homework before ze left for spring break. Ze worked by zirself on this project because ze is taking this course for graduate-level credit.'

Why This Matters

It is kind and affirming to use people's pronouns. It allows readers to passively practice proper pronoun usage through visible and accessible sentences and phrases that models affirming language.

When a trans and/or nonbinary person has just one person in their life that affirms, supports, and accepts them, studies show that they are 39% less likely to attempt suicide. Using affirming-author is simple, easy, and has the potential to educate people on affirming pronoun usage. This work changes and saves lives.

Why not just use they/them pronouns for everyone? It's important to model affirming pronoun usage for everyone. For some people, it takes time and lots of modeling before they start to use people's pronouns correctly. This is especially true for pronouns like ze/zir that people are less familiar with, or situations where people are trying to update their speech patters to use someone's pronouns. Use they/them pronouns for the people who use they/them pronouns, use she/her pronouns for the people who use she/her pronouns, use ze/hir pronouns for the people who use ze/hir pronouns. Use your platform, use your app, use your technology as a model of affirmation and kindness.

Note from Creator (trigger warning)

Hi! I'm Gabe Abrams and I use they/them pronouns. Throughout my life, sexuality and gender has been an oppressive and heartbreaking topic for me. I still have the letter that I wrote when I came out to my mom. It still makes me cry when I read it, because pieces of it are so deeply sad and full of internalized homophobia and transphobia:

"[Being queer] is something I'm extremely unhappy with, I've been trying to fight it for years and there isn't anything I can do. Believe me I wish I could change it, but I think I'm going to have to learn to accept myself. I haven't told anyone because I kept denying it in my head, so I have never had anyone to talk to about this."

"I've been thinking about life in general and I'm not sure if it's possible to meet someone like me; I'm so different from everyone else."

That was more than a decade ago and I am still working so hard to find love and acceptance. Just over a year ago, I finally came out more publicly at work and to the rest of my family. It was devastatingly hard. Some people worked hard to retrain their speech patterns to use my pronouns, some people didn't. More than a year later, much of my family and coworkers don't consistently use my pronouns.

I'm working on myself, trying to live a more positive, optimistic, and proactive life. I am now more open and authentic, working to go from shame to pride about my identities. I am a proud queer trans nonbinary person of color and I am here to make positive change. So, that's why I created affirming-author. My hopeful outlook is that perhaps people would be more kind, be more inclusive, and be more affirming if they only had more models of affirmation around them. If apps and tools used people's pronouns and authored phrases and sentences that actually used people's pronouns in context, not just in parentheses next to people's names, perhaps change could be made.

In so many ways, I myself am still working really hard to be a better ally to all of the beautiful people in the queer community and groups that need more representation and lifting. Tools like affirming-author are going to need to be constantly updated and improved, because queer people are not a monolith and there is no "one size fits all" algorithm or set of pronouns and these topics are rapidly changing and growing. As someone who is hard of hearing, I am also passionate about how intersectionality impacts people, and so I also want to make sure that affirming-author grows and improves in ways that are accessible, supportive of racial justice, and evermore affirming of minoritized people.

So, please join me in this mission. Please use affirming-author and please give me feedback on how to improve it. I am grateful that you are here, and I am thankful to have you onboard with this mission.

Take care, Gabe

More Examples:

// Author function:
createAuthorFunction({
  pronounless: '[Name] will see your message upon logging in.',
  they: '[Name] will see your message when [they] log in.',
  she: '[Name] will see your message when [she] logs in.',
});

// Example authored versions:
// > For Kino (they/them):
'Kino will see your message when they log in.'
// > For Lenna (he/him):
'Lenna will see your message when he logs in.'
// > For Emm (ze/zir)
'Emm will see your message when ze logs in.'
// Author function:
createAuthorFunction({
  pronounless: '[Name] submitted a final thesis paper.',
  they: '[Name] submitted [their] final thesis paper.',
  she: '[Name] submitted [her] final thesis paper.',
});

// Example authored versions:
// > For Gaven (she/her):
'Gaven Red submitted her final thesis paper.'
// > For Opan (pronouns = null)
'Opan Isha submitted a final thesis paper.'
// > For Aray (ze/hir)
'Aray Quen submitted hir final thesis paper.'
// Author function:
{
  pronounless: '[First] has a new last name in the system: "[Last]". The self-service portal allows students to change their names on their own.',
  they: '[First] updated [their] last name to "[Last]". [They] can change [their] information [themselves] through the self-service portal.',
  she: '[First] updated [her] last name to "[Last]". [She] can change [her] information [herself] through the self-service portal.',
}

// Example authored versions:
// > For Kino Lana (they/them):
'Kino updated their last name to "Lana". They can change their information themselves through the self-service portal.'
// > For Lenna Paven (he/him):
'Lenna updated his last name to "Paven". He can change his information himself through the self-service portal.'
// > For Emm Rexa (ze/zir)
'Emm updated zir last name to "Rexa". Ze can change zir information zirself through the self-service portal.'
// Author function:
{
  pronounless: '[Name] entered the classroom and joined group [groupNumber].',
  they: 'When [Name] entered the classroom, [they] joined group [groupNumber].',
  she: 'When [Name] entered the classroom, [she] joined group [groupNumber].',
}

// Example authored versions:
// > For Gaven (she/her), groupNumber = 7:
'When Gaven entered the classroom, she joined group 7.'
// > For Opan (no pronouns), groupNumber 5
'Opan entered the classroom and joined group 5.'
// > For Aray (ze/hir)m groupNumber 3
'When Aray entered the classroom, ze joined group 3.'

Pro Tips:

Adding Pronouns:

If you find that our built-in pronoun list is incomplete, please submit a feature request or email [email protected] to let them know! While they are working on adding the pronouns to the library itself, you can immediately use additional pronouns by creating your own. Include the various cases for the pronoun and a list of "names" (the string representations of the pronouns, used to match agains when an author function gets string pronouns). Example:

// Import affirming-author
import createAuthorFunction, { addPronouns } from 'affirming-author';

// Pronoun where reflexive case is "themself" instead of "themselves":
const TheyThemThemself = {
  // Names (string descriptions to be used in person objects instead of
  //   pronoun objects)
  names: ['they/themself', 'they/them/themself', 'they/them/theirs/themself'],
  // [?] went to the store.
  nomative: 'they',
  // I met [?] today.
  accusative: 'them',
  // Quinn walked [?] dog today.
  pronominalPossessive: 'their',
  // If I need a phone, Quinn will let me borrow [?].
  predicativePossessive: 'theirs',
  // Quinn had to drive [?] to school.
  reflexive: 'themself',
  // Quinn said [?] be here soon. (they'll, she'll, etc.)
  willContraction: 'they\'ll',
  // Quinn promised [?] be here soon. (they'd, she'd, etc.)
  wouldContraction: 'they\'d',
  // Quinn said [?] here. (they're, she's, etc.)
  beContraction: 'they\'re',
};

// Add the pronoun to affirming-author:
addPronouns([TheyThemThemself]);

Use the added pronouns just like you would any of the built-in pronouns:

// All of the following examples...
const notice1 = authorEmmArrivalNotice('they/themself');
const notice2 = authorEmmArrivalNotice(TheyThemThemself);
const notice3 = authorEmmArrivalNotice({ pronouns: 'they/them/themself' });
const notice4 = authorEmmArrivalNotice({ pronouns: TheyThemThemself });

// ...produce the same result:
> 'Emm uploaded their homework before they left for spring break. They worked by themself on this project because they are taking this course for graduate-level credit.'

You can add as many additional pronouns as you need!